exFAT ファイル システムの仕様
1 Introduction (はじめに)
exFAT ファイル システムは、FAT ファミリの FAT32 の後継システムです。 この仕様では、exFAT ファイル システムについて説明し、exFAT ファイル システムの実装に必要なすべての情報を提供します。
1.1 設計目標
exFAT ファイル システムには、3 つの中心的な設計目標があります (以下の一覧を参照)。
FAT ベースのファイル システムのシンプルさを維持します。
FAT ベースのファイル システムの長所の 2 つは、相対的なシンプルさと実装の容易さです。 前任者の精神では、実装者は exFAT を比較的シンプルで簡単に実装できる必要があります。
非常に大きなファイルとストレージ デバイスを有効にします。
exFAT ファイル システムでは、64 ビットを使用してファイル サイズが記述されるため、非常に大きなファイルに依存するアプリケーションが可能になります。 exFAT ファイル システムでは、32 MB のクラスターも可能になり、効果的に非常に大きなストレージ デバイスが可能になります。
将来のイノベーションのための拡張性を組み込みます。
exFAT ファイル システムは、その設計に拡張性を組み込み、ファイル システムがストレージのイノベーションと使用状況の変化に対応できるようにします。
1.2 特定の用語
この仕様のコンテキストでは、exFAT ファイル システムの設計と実装に関する特定の用語 ( 表 1 を参照) が具体的な意味を持ちます。
表 1 非常に具体的な意味を持つ用語の定義
用語 | 定義 |
---|---|
次の場合 | この仕様では、"shall" という用語を使用して、必須の動作を記述します。 |
推奨 | この仕様では、"should" という用語を使用して、強く推奨される動作を記述しますが、必須ではありません。 |
May | この仕様では、"may" という用語を使用して、省略可能な動作を記述します。 |
Mandatory | この用語は、実装が変更し、この仕様で説明されているように解釈するフィールドまたは構造体を表します。 |
オプション | この用語は、実装がサポートする可能性があるフィールドまたは構造体を表します。 実装で特定の省略可能なフィールドまたは構造体がサポートされている場合は、この仕様で説明されているように、フィールドまたは構造体を変更し、解釈する必要があります。 |
未定義。 | この用語は、実装が必要に応じて変更する可能性があるフィールドまたは構造体の内容 (つまり、周囲のフィールドまたは構造体を設定する場合はゼロにクリア) を記述し、特定の意味を保持するように解釈しません。 |
予約済み | この用語では、実装するフィールドまたは構造体の内容について説明します。
|
1.3 一般的な頭字語の全文
この仕様では、パーソナル コンピューター業界で一般的に使用される頭字語を使用します ( 表 2 を参照)。
表 2 一般的な頭字語の全文
頭字語 | [フルテキスト] |
---|---|
ASCII | 情報交換のためのアメリカ標準コード |
BIOS | 基本的な入力出力システム |
CPU | 中央処理装置 |
exFAT | 拡張可能なファイル割り当てテーブル |
FAT | ファイル割り当てテーブル |
FAT12 | ファイル割り当てテーブル、12 ビット クラスター インデックス |
FAT16 | ファイル割り当てテーブル、16 ビット クラスター インデックス |
FAT32 | ファイル割り当てテーブル、32 ビット クラスター インデックス |
GPT | GUID パーティション テーブル |
GUID | グローバル一意識別子 ( セクション 10.1 を参照) |
INT | 割り込み |
MBR | マスター ブート レコード |
texFAT | トランザクション セーフな exFAT |
UTC | 協定世界時 |
1.4 既定のフィールド修飾子と構造体修飾子
この仕様のフィールドと構造体には、特に明記されていない限り、次の修飾子があります (以下の一覧を参照)。
符号なし
10 進表記を使用して値を記述します。特に明記されていません。この仕様では、修正後の文字 "h" を使用して 16 進数を示し、GUID を中かっこで囲みます
リトル エンディアン形式
文字列に null で終わる文字は必要ありません
1.5 Windows CEとTexFAT
TexFAT は exFAT の拡張機能であり、基本ファイル システムの上にトランザクション セーフな運用セマンティクスを追加します。 TexFAT は、Windows CEによって使用されます。 TexFAT では、トランザクションで使用するために 2 つの FAT と割り当てビットマップを使用する必要があります。 また、埋め込み記述子やセキュリティ記述子など、いくつかの追加の構造体も定義します。
2 ボリューム構造
ボリュームは、ユーザー データの格納と取得に必要なすべてのファイル システム構造とデータ領域のセットです。 すべての exFAT ボリュームには、4 つのリージョンが含まれています ( 表 3 を参照)。
表 3 ボリューム構造
サブリージョン名 | Offset (セクター) |
[サイズ] (セクター) |
コメント |
---|---|---|---|
メイン ブート リージョン | |||
メイン ブート セクター | 0 | 1 | このサブリージョンは必須であり、 セクション 3.1 ではその内容を定義します。 |
主な拡張ブート セクター | 1 | 8 | このサブリージョンは必須であり、 セクション 3.2) はその内容を定義します。 |
主要な OEM パラメーター | 9 | 1 | このサブリージョンは必須であり、 セクション 3.3 では その内容を定義します。 |
メイン予約済み | 10 | 1 | このサブリージョンは必須であり、その内容は予約されています。 |
メイン ブート チェックサム | 11 | 1 | このサブリージョンは必須であり、 セクション 3.4 では その内容を定義します。 |
バックアップ ブートリージョン | |||
バックアップ ブート セクター | 12 | 1 | このサブリージョンは必須であり、 セクション 3.1 ではその内容を定義します。 |
拡張ブート セクターのバックアップ | 13 | 8 | このサブリージョンは必須であり、 セクション 3.2 ではその内容を定義します。 |
OEM パラメーターのバックアップ | 21 | 1 | このサブリージョンは必須であり、 セクション 3.3 では その内容を定義します。 |
バックアップ予約済み | 22 | 1 | このサブリージョンは必須であり、その内容は予約されています。 |
バックアップ ブート チェックサム | 23 | 1 | このサブリージョンは必須であり、 セクション 3.4 では その内容を定義します。 |
FAT リージョン | |||
FAT アラインメント | 24 | FatOffset – 24 | このサブリージョンは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターの両方に FatOffset フィールドが含まれています。 |
最初の FAT | FatOffset | FatLength | このサブリージョンは必須であり、 セクション 4.1 ではその内容を定義します。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも FatOffset フィールドと FatLength フィールドが含まれています。 |
2 番目の FAT | FatOffset + FatLength | FatLength * (NumberOfFats – 1) | このサブリージョンは必須であり、 セクション 4.1 ではその内容が定義されます (存在する場合)。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも FatOffset、FatLength、および NumberOfFats フィールドが含まれています。 NumberOfFats フィールドには、値 1 と 2 のみを保持できます。 |
データ領域 | |||
クラスター ヒープの配置 | FatOffset + FatLength * NumberOfFats | ClusterHeapOffset – (FatOffset + FatLength * NumberOfFats) | このサブリージョンは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも FatOffset、FatLength、NumberOfFats、ClusterHeapOffset フィールドが含まれています。 NumberOfFats フィールドの有効な値は 1 と 2 です。 |
クラスター ヒープ | ClusterHeapOffset | ClusterCount * 2セクターPerClusterShift | このサブリージョンは必須であり、 セクション 5.1 では その内容を定義します。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも ClusterHeapOffset、ClusterCount、および SectorsPerClusterShift フィールドが含まれています。 |
余分な領域 | ClusterHeapOffset + ClusterCount * 2セクターPerClusterShift | VolumeLength – (ClusterHeapOffset + ClusterCount * 2SectorsPerClusterShift) | このサブリージョンは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも ClusterHeapOffset、ClusterCount、SectorsPerClusterShift、VolumeLength フィールドが含まれています。 |
3 メインブートリージョンとバックアップブートリージョン
Main Boot リージョンには、次の実行を実装するために必要なすべてのブート ストラップ命令、情報の識別、およびファイル システム パラメーターが用意されています。
exFAT ボリュームからコンピューター システムをブートストラップします。
ボリューム上のファイル システムを exFAT として識別します。
exFAT ファイル システム構造の場所を確認します。
バックアップ ブート リージョンは、メイン ブート リージョンのバックアップです。 これは、メイン ブート リージョンが不整合な状態にある場合の exFAT ボリュームの回復を支援します。 ブートストラップ命令の更新などの頻度の低い状況を除き、実装ではバックアップ ブート リージョンの内容を変更しないでください。
3.1 メインおよびバックアップブートセクターサブリージョン
メイン ブート セクターには、exFAT ボリュームからのブート ストラップ用のコードと、ボリューム構造を記述する基本的な exFAT パラメーターが含まれています ( 表 4 を参照)。 BIOS、MBR、またはその他のブートストラップエージェントは、このセクターを検査し、そこに含まれるブートストラップ命令を読み込んで実行することができます。
バックアップ ブート セクターは、メイン ブート セクターのバックアップであり、同じ構造を持ちます ( 表 4 を参照)。 バックアップ ブート セクターは、回復操作に役立つ場合があります。ただし、実装では、VolumeFlags フィールドと PercentInUse フィールドの内容を古いものとして扱う必要があります。
メイン ブート セクターまたはバックアップ ブート セクターのコンテンツを使用する前に、実装では、それぞれのブート チェックサムを検証し、すべてのフィールドが有効な値範囲内であることを確認することで、その内容を確認する必要があります。
初期フォーマット操作ではメイン ブート セクターとバックアップ ブート セクターの両方の内容が初期化されますが、実装では、必要に応じてこれらのセクターを更新できます (また、それぞれのブート チェックサムも更新する必要があります)。 ただし、実装では、それぞれのブート チェックサムを更新せずに VolumeFlags フィールドまたは PercentInUse フィールドを更新できます (チェックサムでは、これら 2 つのフィールドは特に除外されます)。
表 4 メインブートセクターとバックアップブートセクター構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
JumpBoot | 0 | 3 | このフィールドは必須であり、 セクション 3.1.1 ではその内容を定義します。 |
FileSystemName | 3 | 8 | このフィールドは必須であり、 セクション 3.1.2 ではその内容を定義します。 |
MustBeZero | 11 | 53 | このフィールドは必須であり、 セクション 3.1.3 ではその内容が定義されています。 |
PartitionOffset | 64 | 8 | このフィールドは必須であり、 セクション 3.1.4 ではその内容を定義します。 |
VolumeLength | 72 | 8 | このフィールドは必須であり、 セクション 3.1.5 では内容が定義されています。 |
FatOffset | 80 | 4 | このフィールドは必須であり、 セクション 3.1.6 ではその内容を定義します。 |
FatLength | 84 | 4 | このフィールドは必須であり、 セクション 3.1.7 では内容が定義されています。 |
ClusterHeapOffset | 88 | 4 | このフィールドは必須であり、 セクション 3.1.8 では内容が定義されています。 |
ClusterCount | 92 | 4 | このフィールドは必須であり、 セクション 3.1.9 ではその内容を定義します。 |
FirstClusterOfRootDirectory | 96 | 4 | このフィールドは必須であり、 セクション 3.1.10 ではその内容が定義されています。 |
VolumeSerialNumber | 100 | 4 | このフィールドは必須であり、 セクション 3.1.11 はその内容を定義します。 |
FileSystemRevision | 104 | 2 | このフィールドは必須であり、 セクション 3.1.12 ではその内容が定義されています。 |
VolumeFlags | 106 | 2 | このフィールドは必須であり、 セクション 3.1.13 では内容が定義されています。 |
BytesPerSectorShift | 108 | 1 | このフィールドは必須であり、 セクション 3.1.14 ではその内容が定義されています。 |
SectorsPerClusterShift | 109 | 1 | このフィールドは必須であり、 セクション 3.1.15 ではその内容が定義されています。 |
NumberOfFats | 110 | 1 | このフィールドは必須であり、 セクション 3.1.16 ではその内容が定義されています。 |
DriveSelect | 111 | 1 | このフィールドは必須であり、 セクション 3.1.17 ではその内容が定義されています。 |
PercentInUse | 112 | 1 | このフィールドは必須であり、 セクション 3.1.18 ではその内容が定義されています。 |
予約済み | 113 | 7 | このフィールドは必須であり、その内容は予約されています。 |
ブートコード | 120 | 390 | このフィールドは必須であり、 セクション 3.1.19 ではその内容が定義されています。 |
BootSignature | 510 | 2 | このフィールドは必須であり、 セクション 3.1.20 ではその内容が定義されています。 |
ExcessSpace | 512 | 2BytesPerSectorShift – 512 | このフィールドは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.1.1 JumpBoot フィールド
JumpBoot フィールドには、パーソナル コンピューターで一般的な CPU のジャンプ命令が含まれている必要があります。この命令を実行すると、CPU が "ジャンプ" され、BootCode フィールドでブート ストラップ命令が実行されます。
このフィールドの有効な値は、(下位バイトから上位バイトの順) EBh 76h 90h です。
3.1.2 FileSystemName フィールド
FileSystemName フィールドには、ボリューム上のファイル システムの名前が含まれている必要があります。
このフィールドの有効な値は、ASCII 文字の "EXFAT" で、末尾に空白が 3 つ含まれています。
3.1.3 MustBeZero フィールド
MustBeZero フィールドは、パックされた BIOS パラメーター ブロックが FAT12/16/32 ボリュームで消費するバイト範囲に直接対応する必要があります。
このフィールドの有効な値は 0 です。これは、FAT12/16/32 実装が exFAT ボリュームを誤ってマウントするのを防ぐのに役立ちます。
3.1.4 PartitionOffset フィールド
PartitionOffset フィールドは、指定された exFAT ボリュームをホストするパーティションのメディア相対セクター オフセットを記述する必要があります。 このフィールドは、パーソナル コンピューターで拡張 INT 13h を使用してボリュームからのブート ストラップを支援します。
このフィールドに指定できる値はすべて有効です。ただし、値 0 は、実装がこのフィールドを無視する必要があることを示します。
3.1.5 VolumeLength フィールド
VolumeLength フィールドには、セクター内の指定された exFAT ボリュームのサイズを記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも2 20/ 2BytesPerSectorShift。最小のボリュームが 1 MB 以上であることを保証します
最大 264 - 1、このフィールドで記述できる最大値。
ただし、余分な領域のサブ領域のサイズが 0 の場合、このフィールドの最大値は ClusterHeapOffset + (232- 11) * 2SectorsPerClusterShift です。
3.1.6 FatOffset フィールド
FatOffset フィールドは、First FAT のボリューム相対セクター オフセットを記述する必要があります。 このフィールドを使用すると、最初の FAT を基になるストレージ メディアの特性に合わせて実装できます。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 24 個。メイン ブートリージョンとバックアップ ブートリージョンが消費するセクターを占める
クラスター ヒープが消費するセクターを占める ClusterHeapOffset - (FatLength * NumberOfFats)
3.1.7 FatLength フィールド
FatLength フィールドは、各 FAT テーブルの長さをセクター単位で記述する必要があります (ボリュームには最大 2 つの FAT が含まれる場合があります)。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも (ClusterCount + 2) *2 2/ 2BytesPerSectorShiftが最も近い整数に切り上げられ、各 FAT にクラスター ヒープ内のすべてのクラスターを記述するための十分な領域が確保されます
最大 (ClusterHeapOffset - FatOffset) / NumberOfFats を最も近い整数に切り捨てて、クラスター ヒープの前に FAT が存在することを保証します
このフィールドは、第2のFATが存在する場合、基になる記憶媒体の特性に整合させるために(上記のように)その下限を超える値を含み得る。 FAT 自体が必要とする内容を超える領域の内容 (存在する場合) は未定義です。
3.1.8 ClusterHeapOffset フィールド
ClusterHeapOffset フィールドは、クラスター ヒープのボリューム相対セクター オフセットを記述する必要があります。 このフィールドを使用すると、実装でクラスター ヒープを基になるストレージ メディアの特性に合わせて調整できます。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも FatOffset + FatLength * NumberOfFats。
最大 232- 1 または VolumeLength - (ClusterCount * 2SectorsPerClusterShift) のいずれか小さい方の計算
3.1.9 ClusterCount フィールド
[ClusterCount] フィールドには、クラスター ヒープに含まれるクラスターの数を記述する必要があります。
このフィールドの有効な値は、次の値より小さい値になります。
(VolumeLength - ClusterHeapOffset) / 2SectorsPerClusterShiftを最も近い整数に切り捨てます。これは、クラスター ヒープの先頭とボリュームの末尾の間に収まるクラスターの数です。
232 - 11。これは FAT が記述できるクラスターの最大数です
ClusterCount フィールドの値によって、FAT の最小サイズが決まります。 非常に大きな FAT を回避するために、実装ではクラスター サイズを増やすことでクラスター ヒープ内のクラスターの数を制御できます ([SectorsPerClusterShift] フィールドを使用)。 この仕様では、クラスター ヒープ内のクラスターは2 24 から 2 個以下にすることをお勧めします。 ただし、実装では、クラスター ヒープ内の最大 2 個の32 ~ 11 個のクラスターを含むボリュームを処理できる必要があります。
3.1.10 FirstClusterOfRootDirectory フィールド
FirstClusterOfRootDirectory フィールドには、ルート ディレクトリの最初のクラスターのクラスター インデックスが含まれている必要があります。 実装では、割り当てビットマップとアップケース テーブルが使用するクラスターの後に、ルート ディレクトリの最初のクラスターを最初の不適切でないクラスターに配置する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 2、クラスター ヒープ内の最初のクラスターのインデックス
最大 ClusterCount + 1、クラスター ヒープ内の最後のクラスターのインデックス
3.1.11 VolumeSerialNumber フィールド
VolumeSerialNumber フィールドには、一意のシリアル番号が含まれている必要があります。 これにより、異なる exFAT ボリュームを区別するための実装が支援されます。 実装では、exFAT ボリュームの書式設定の日時を組み合わせてシリアル番号を生成する必要があります。 日付と時刻を組み合わせてシリアル番号を形成するメカニズムは、実装固有です。
このフィールドに指定できる値はすべて有効です。
3.1.12 FileSystemRevision フィールド
FileSystemRevision フィールドは、指定されたボリューム上の exFAT 構造体のメジャーリビジョン番号とマイナーリビジョン番号を記述する必要があります。
上位バイトはメジャー リビジョン番号、下位バイトはマイナー リビジョン番号です。 たとえば、高位バイトに値 01h が含まれており、下位バイトに値 05h が含まれている場合、FileSystemRevision フィールドにはリビジョン番号 1.05 が記述されます。 同様に、上位バイトに値 0Ah が含まれており、下位バイトに値 0Fh が含まれている場合は、FileSystemRevision フィールドにリビジョン番号 10.15 が記述されます。
このフィールドの有効な値の範囲は次のとおりです。
下位バイトの場合は少なくとも 0、上位バイトの場合は 1
下位バイトの場合は最大 99、上位バイトの場合は 99
この仕様で説明する exFAT のリビジョン番号は 1.00 です。 この仕様の実装では、メジャー リビジョン番号 1 の exFAT ボリュームをマウントする必要があり、他のメジャー リビジョン番号を持つ exFAT ボリュームをマウントすることはできません。 実装では、マイナー リビジョン番号を尊重し、操作を実行したり、指定されたマイナー リビジョン番号の対応する仕様に記載されていないファイル システム構造を作成したりすることはできません。
3.1.13 VolumeFlags フィールド
VolumeFlags フィールドには、exFAT ボリューム上のさまざまなファイル システム構造の状態を示すフラグが含まれている必要があります ( 表 5 を参照)。
実装では、それぞれのメイン ブートまたはバックアップ ブート領域のチェックサムを計算するときに、このフィールドを含めないようにします。 バックアップ ブート セクターを参照する場合、実装では、このフィールドを古いものとして扱う必要があります。
表 5 VolumeFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
ActiveFat | 0 | 1 | このフィールドは必須であり、 セクション 3.1.13.1 ではその内容を定義します。 |
VolumeDirty | 1 | 1 | このフィールドは必須であり、 セクション 3.1.13.2 ではその内容が定義されています。 |
MediaFailure | 2 | 1 | このフィールドは必須であり、 セクション 3.1.13.3 ではその内容を定義します。 |
ClearToZero | 3 | 1 | このフィールドは必須であり、 セクション 3.1.13.4 ではその内容を定義します。 |
予約済み | 4 | 12 | このフィールドは必須であり、その内容は予約されています。 |
3.1.13.1 ActiveFat フィールド
ActiveFat フィールドでは、アクティブな FAT と割り当てビットマップを記述する必要があります (実装では、次のように使用します)。
0。最初の FAT および最初の割り当てビットマップがアクティブであることを意味します
1。これは、2 番目の FAT および 2 番目の割り当てビットマップがアクティブであり、NumberOfFats フィールドに値 2 が含まれている場合にのみ可能であることを意味します。
実装では、非アクティブな FAT と割り当てビットマップは古いものと見なす必要があります。 アクティブな FAT および割り当てビットマップを切り替えるのは、TexFAT 対応の実装のみです ( セクション 7.1 を参照)。
3.1.13.2 VolumeDirty フィールド
VolumeDirty フィールドでは、ボリュームがダーティされているかどうかを次のように記述する必要があります。
0。これは、ボリュームが一貫した状態である可能性を意味します
1。ボリュームが不整合な状態である可能性があります
実装では、解決されないファイル システム メタデータの不整合が発生した場合に、このフィールドの値を 1 に設定する必要があります。 ボリュームのマウント時にこのフィールドの値が 1 の場合、ファイル システムのメタデータの不整合を解決する実装のみが、このフィールドの値を 0 にクリアできます。 このような実装では、ファイル システムが一貫した状態であることを確認した後にのみ、このフィールドの値を 0 にクリアする必要があります。
ボリュームのマウント時にこのフィールドの値が 0 の場合、実装では、ファイル システムメタデータを更新する前にこのフィールドを 1 に設定し、その後、 セクション 8.1 で説明されている推奨書き込み順序と同様に、このフィールドを 0 にクリアする必要があります。
3.1.13.3 MediaFailure フィールド
MediaFailure フィールドには、実装でメディアエラーが検出されたかどうかを次のように記述する必要があります。
0。これは、ホスト メディアがエラーを報告していないか、既知のエラーが FAT に "不良" クラスターとして既に記録されていることを意味します
1。これは、ホスティング メディアがエラーを報告したことを意味します (つまり、読み取りまたは書き込み操作が失敗しました)
実装では、次の場合にこのフィールドを 1 に設定する必要があります。
ホスティング メディアは、ボリューム内の任意のリージョンへのアクセス試行に失敗します
実装では、アクセス再試行アルゴリズムが使い果たされました (存在する場合)
ボリュームのマウント時に、このフィールドの値が 1 の場合、ボリューム全体でメディア障害をスキャンし、すべての障害を FAT の "不良" クラスターとして記録する実装 (またはメディアエラーを解決する) は、このフィールドの値を 0 にクリアする可能性があります。
3.1.13.4 ClearToZero フィールド
ClearToZero フィールドは、この仕様では重要な意味を持っていません。
このフィールドの有効な値は次のとおりです。
特定の意味を持たない 0
1 は、ファイル システムの構造、ディレクトリ、またはファイルを変更する前に、実装がこのフィールドを 0 にクリアすることを意味します
3.1.14 BytesPerSectorShift フィールド
BytesPerSectorShift フィールドは、ログ2(N) として表されるセクターごとのバイト数を記述する必要があります。N はセクターあたりのバイト数です。 たとえば、セクターあたり 512 バイトの場合、このフィールドの値は 9 です。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 9 (512 バイトのセクター サイズ)、これは exFAT ボリュームで可能な最小のセクターです
最大 12 (セクター サイズは 4096 バイト)、これはパーソナル コンピューターで一般的な CPU のメモリ ページ サイズです
3.1.15 セクターPerClusterShift フィールド
[SectorsPerClusterShift] フィールドには、ログ2(N) として表されるクラスターごとのセクターを記述する必要があります。N はクラスターあたりのセクター数です。 たとえば、クラスターあたり 8 セクターの場合、このフィールドの値は 3 です。
このフィールドの有効な値の範囲は次のとおりです。
可能な最小のクラスターである少なくとも 0 (クラスターあたり 1 セクター)
最大 25 - BytesPerSectorShift。クラスター サイズは 32 MB と評価されます
3.1.16 NumberOfFats フィールド
NumberOfFats フィールドには、ボリュームに含まれる FAT と割り当てビットマップの数を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
1。ボリュームに最初の FAT と最初の割り当てビットマップのみが含まれていることを示します
2 は、ボリュームに最初の FAT、2 番目の FAT、最初の割り当てビットマップ、および 2 番目の割り当てビットマップが含まれていることを示します。この値は TexFAT ボリュームでのみ有効です
3.1.17 DriveSelect フィールド
DriveSelect フィールドには拡張 INT 13h ドライブ番号が含まれている必要があります。これは、パーソナル コンピューターで拡張 INT 13h を使用して、このボリュームからのブート ストラップを支援します。
このフィールドに指定できる値はすべて有効です。 以前の FAT ベースのファイル システムの同様のフィールドには、多くの場合、値 80h が含まれていました。
3.1.18 PercentInUse フィールド
PercentInUse フィールドには、割り当てられているクラスター ヒープ内のクラスターの割合を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
0 ~ 100 (クラスター ヒープ内の割り当てられたクラスターの割合) を含めて、最も近い整数に切り捨てます
正確に FFh。クラスター ヒープ内の割り当てられたクラスターの割合を示します。
実装では、クラスター ヒープ内のクラスターの割り当ての変更を反映するようにこのフィールドの値を変更するか、FFh に変更する必要があります。
それぞれのメイン ブートまたはバックアップ ブート リージョンのチェックサムを計算する場合、実装にはこのフィールドを含めないものとします。 バックアップ ブート セクターを参照する場合、実装では、このフィールドを古いものとして扱う必要があります。
3.1.19 BootCode フィールド
BootCode フィールドには、ブートストラップの手順が含まれている必要があります。 実装では、コンピューター システムのブートストラップに必要な CPU 命令をこのフィールドに設定できます。 ブートストラップ命令を提供しない実装では、フォーマット操作の一環として、このフィールドの各バイトを F4h (パーソナル コンピューターで一般的な CPU の停止命令) に初期化する必要があります。
3.1.20 BootSignature フィールド
BootSignature フィールドは、特定のセクターの意図がブート セクターであるかどうかを示す必要があります。
このフィールドの有効な値は AA55h です。 このフィールドの他の値は、それぞれのブート セクターを無効にします。 実装では、それぞれのブート セクター内の他のフィールドに応じて、前にこのフィールドの内容を確認する必要があります。
3.2 メインおよびバックアップ拡張ブートセクターサブリージョン
メイン拡張ブート セクターの各セクターの構造は同じです。ただし、各セクターには、個別のブート ストラップ命令が含まれる場合があります (表 6 を参照)。 メイン ブート セクターのブート ストラップ命令、代替 BIOS 実装、または組み込みシステムのファームウェアなどのブート ストラップ エージェントは、これらのセクターを読み込み、含まれている命令を実行する場合があります。
バックアップ拡張ブート セクターは、メインの拡張ブート セクターのバックアップであり、同じ構造を持ちます ( 表 6 を参照)。
Main または Backup の拡張ブート セクターの命令を実行する前に、各セクターの ExtendedBootSignature フィールドに指定された値が含まれていることを確認することで、実装で内容を確認する必要があります。
初期形式の操作では Main と Backup の両方の拡張ブート セクターの内容が初期化されますが、実装では、必要に応じてこれらのセクターを更新する (また、それぞれのブート チェックサムも更新する必要があります) 場合があります。
表 6 拡張ブート セクター構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ExtendedBootCode | 0 | 2BytesPerSectorShift – 4 | このフィールドは必須であり、 セクション 3.2.1 では内容が定義されています。 注: メイン ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
ExtendedBootSignature | 2BytesPerSectorShift – 4 | 4 | このフィールドは必須であり、 セクション 3.2.2 ではその内容が定義されています。 注: メイン ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.2.1 ExtendedBootCode フィールド
ExtendedBootCode フィールドには、ブートストラップ命令が含まれている必要があります。 実装では、コンピューター システムのブートストラップに必要な CPU 命令をこのフィールドに設定できます。 ブートストラップ命令を提供しない実装では、フォーマット操作の一環として、このフィールドの各バイトを 00h に初期化する必要があります。
3.2.2 ExtendedBootSignature フィールド
ExtendedBootSignature フィールドは、特定のセクターの意図が拡張ブート セクターであるかどうかを示す必要があります。
このフィールドの有効な値は AA550000h です。 このフィールドの他の値は、それぞれの Main または Backup Extended Boot Sector を無効にします。 実装では、それぞれの拡張ブート セクター内の他のフィールドに応じて、前にこのフィールドの内容を確認する必要があります。
メインおよびバックアップのOEMパラメータサブリージョン
主要な OEM パラメーター サブリージョンには、製造元固有の情報を含む可能性がある 10 個のパラメーター構造が含まれています ( 表 7 を参照)。 10 個の各パラメーター構造は、ジェネリック パラメーター テンプレートから派生します ( セクション 3.3.2 を参照)。 製造元は、ジェネリック パラメーター テンプレートから独自のカスタム パラメーター構造を派生できます。 この仕様自体は、Null パラメーター ( セクション 3.3.3 を参照) とフラッシュ パラメーター ( セクション 3.3.4 を参照) の 2 つのパラメーター構造を定義します。
バックアップ OEM パラメーターは、主要な OEM パラメーターのバックアップであり、同じ構造を持ちます ( 表 7 を参照)。
Main または Backup OEM パラメーターの内容を使用する前に、実装ではそれぞれのブート チェックサムを検証して内容を確認する必要があります。
製造元は、Main パラメーターと Backup OEM パラメーターに独自のカスタム パラメーター構造 (存在する場合) とその他のパラメーター構造を設定する必要があります。 後続のフォーマット操作では、Main パラメーターと Backup OEM パラメーターの内容が保持されます。
実装では、必要に応じて Main パラメーターと Backup OEM パラメーターを更新できます (また、それぞれのブート チェックサムも更新する必要があります)。
表 7 OEM パラメーターの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
Parameters[0] | 0 | 48 | このフィールドは必須であり、 セクション 3.3.1 ではその内容が定義されています。 |
. . . |
. . . |
. . . |
. . . |
Parameters[9] | 432 | 48 | このフィールドは必須であり、 セクション 3.3.1 ではその内容が定義されています。 |
予約済み | 480 | 2BytesPerSectorShift – 480 | このフィールドは必須であり、その内容は予約されています。 注: メイン ブート セクターとバックアップ ブート セクターの両方に BytesPerSectorShift フィールドが含まれています。 |
3.3.1 Parameters[0] ...Parameters[9]
この配列の各 Parameters フィールドには、ジェネリック パラメーター テンプレートから派生したパラメーター構造が含まれています ( セクション 3.3.2 を参照)。 使用されていない Parameters フィールドは、Null Parameters 構造体を含んでいると記述する必要があります ( セクション 3.3.3 を参照)。
3.3.2 ジェネリック パラメーター テンプレート
ジェネリック パラメーター テンプレートは、パラメーター構造の基本定義を提供します ( 表 8 を参照)。 すべてのパラメーター構造体は、このテンプレートから派生します。 この汎用パラメーター テンプレートのサポートは必須です。
表 8 ジェネリック パラメーター テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ParametersGuid | 0 | 16 | このフィールドは必須であり、 セクション 3.3.2.1 ではその内容が定義されています。 |
CustomDefined | 16 | 32 | このフィールドは必須であり、このテンプレートから派生する構造体は、その内容を定義します。 |
3.3.2.1 ParametersGuid フィールド
ParametersGuid フィールドには、指定されたパラメーター構造の残りの部分のレイアウトを決定する GUID を記述する必要があります。
このフィールドに指定できる値はすべて有効です。ただし、製造元は、このテンプレートからカスタム パラメーター構造を派生させる際に GUID を選択するために、GuidGen.exeなどの GUID 生成ツールを使用する必要があります。
3.3.3 Null パラメーター
Null Parameters 構造体は、ジェネリック パラメーター テンプレートから派生し ( セクション 3.3.2 を参照)、未使用の Parameters フィールドを記述する必要があります ( 表 9 を参照)。 OEM Parameters 構造体を作成または更新する場合、実装では、使用されていない Parameters フィールドに Null Parameters 構造体を設定する必要があります。 また、OEM Parameters 構造体を作成または更新する場合、実装では、配列の末尾に Null Parameters 構造体を統合し、OEM Parameters 構造体の先頭に他のすべての Parameters 構造体を残す必要があります。
Null パラメーター構造体のサポートは必須です。
表 9 Null パラメーター構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ParametersGuid | 0 | 16 | このフィールドは必須であり、 セクション 3.3.3.1 ではその内容が定義されています。 |
予約済み | 16 | 32 | このフィールドは必須であり、その内容は予約されています。 |
3.3.3.1 ParametersGuid フィールド
ParametersGuid フィールドは、ジェネリック パラメーター テンプレートによって提供される定義に準拠している必要があります ( セクション 3.3.2.1 を参照)。
GUID 表記のこのフィールドの有効な値は です {00000000-0000-0000-0000-000000000000}。
3.3.4 フラッシュパラメータ
Flash Parameter 構造体は、汎用パラメーター テンプレートから派生し ( セクション 3.3.2 を参照)、フラッシュ メディアのパラメーターを含みます ( 表 10 を参照)。 フラッシュ ベースの記憶装置の製造元は、Parameters フィールド (好ましくは Parameters[0] フィールド) にこのパラメーター構造を設定できます。 実装では、Flash Parameters 構造体の情報を使用して、読み取り/書き込み中のアクセス操作を最適化し、メディアの書式設定をダーリングするファイル システム構造の配置を行うことができます。
Flash Parameters 構造体のサポートは省略可能です。
表 10 フラッシュ パラメータの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
ParametersGuid | 0 | 16 | このフィールドは必須であり、 セクション 3.3.4.1 ではその内容が定義されています。 |
EraseBlockSize | 16 | 4 | このフィールドは必須であり、 セクション 3.3.4.2 ではその内容が定義されています。 |
PageSize | 20 | 4 | このフィールドは必須であり、 セクション 3.3.4.3 ではその内容が定義されています。 |
SpareSectors | 24 | 4 | このフィールドは必須であり、 セクション 3.3.4.4 では その内容が定義されています。 |
RandomAccessTime | 28 | 4 | このフィールドは必須であり、 セクション 3.3.4.5 ではその内容が定義されています。 |
ProgrammingTime | 32 | 4 | このフィールドは必須であり、 セクション 3.3.4.6 ではその内容が定義されています。 |
ReadCycle | 36 | 4 | このフィールドは必須であり、 セクション 3.3.4.7 ではその内容が定義されています。 |
WriteCycle | 40 | 4 | このフィールドは必須であり、 セクション 3.3.4.8 ではその内容が定義されています。 |
予約済み | 44 | 4 | このフィールドは必須であり、その内容は予約されています。 |
ParametersGuid フィールドを除くすべての Flash Parameters フィールドで使用可能なすべての値が有効です。 ただし、値 0 は、フィールドが実際には無意味であることを示します (実装では、指定されたフィールドは無視されます)。
3.3.4.1 ParametersGuid フィールド
ParametersGuid フィールドは、ジェネリック パラメーター テンプレートで提供される定義に準拠する必要があります ( セクション 3.3.2.1 を参照)。
GUID 表記のこのフィールドの有効な値は{0A0C7E46-3399-4021-90C8-FA6D389C4BA2} です。
3.3.4.2 EraseBlockSize フィールド
EraseBlockSize フィールドは、フラッシュ メディアの消去ブロックのサイズをバイト単位で記述する必要があります。
3.3.4.3 PageSize フィールド
PageSize フィールドには、フラッシュ メディアのページのサイズ (バイト単位) を記述する必要があります。
3.3.4.4 SpareSectors フィールド
SpareSectors フィールドには、フラッシュ メディアが内部的な控えめ操作で使用できるセクターの数を記述する必要があります。
3.3.4.5 RandomAccessTime フィールド
RandomAccessTime フィールドは、フラッシュ メディアの平均ランダム アクセス時間をナノ秒単位で記述する必要があります。
3.3.4.6 ProgrammingTime フィールド
ProgrammingTime フィールドは、フラッシュ メディアの平均プログラミング時間をナノ秒単位で記述する必要があります。
3.3.4.7 ReadCycle フィールド
ReadCycle フィールドには、フラッシュ メディアの平均読み取りサイクル時間をナノ秒単位で記述する必要があります。
3.3.4.8 WriteCycle フィールド
WriteCycle フィールドには、平均書き込みサイクル時間をナノ秒単位で記述する必要があります。
3.4 メインおよびバックアップブートチェックサムサブリージョン
メイン ブート チェックサムとバックアップ ブート チェックサムにはそれぞれ、それぞれのブート リージョン内の他のすべてのサブリージョンのコンテンツの 4 バイト チェックサムの繰り返しパターンが含まれています。 チェックサム計算には、それぞれのブート セクターに VolumeFlags フィールドと PercentInUse フィールドを含めないようにします ( 図 1 を参照)。 4 バイト チェックサムの繰り返しパターンは、サブリージョンの先頭から末尾まで、それぞれのブート チェックサム サブリージョンを満たします。
Main または Backup Boot リージョンのいずれかの他のサブリージョンのコンテンツを使用する前に、実装ではそれぞれのブート チェックサムを検証して、その内容を確認する必要があります。
初期形式の操作では、メイン ブート チェックサムとバックアップ ブート チェックサムの両方に繰り返しチェックサム パターンが設定されますが、実装では、それぞれのブート リージョン内の他のセクターの内容が変更されると、これらのセクターを更新する必要があります。
図 1 ブート チェックサムの計算
UInt32 BootChecksum
(
UCHAR * Sectors, // points to an in-memory copy of the 11 sectors
USHORT BytesPerSector
)
{
UInt32 NumberOfBytes = (UInt32)BytesPerSector * 11;
UInt32 Checksum = 0;
UInt32 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 106) || (Index == 107) || (Index == 112))
{
continue;
}
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Sectors[Index];
}
return Checksum;
}
4 ファイル割り当てテーブルのリージョン
ファイル割り当てテーブル (FAT) 領域には、最初の FAT サブリージョンと 2 番目の FAT サブリージョンの 1 つを含む最大 2 つの FAT が含まれる場合があります。 NumberOfFats フィールドには、このリージョンに含まれる FAT の数が示されます。 NumberOfFats フィールドの有効な値は 1 と 2 です。 したがって、最初の FAT サブ領域には常に FAT が含まれます。 NumberOfFats フィールドが 2 の場合、2 番目の FAT サブリージョンにも FAT が含まれます。
VolumeFlags フィールドの ActiveFat フィールドには、アクティブな FAT が記述されています。 メイン ブート セクターの VolumeFlags フィールドのみが最新です。 実装では、アクティブではない FAT を古いものとして扱う必要があります。 非アクティブな FAT の使用と GT 間の切り替えは、実装固有です。
4.1 1 番目と 2 番目の FAT サブリージョン
FAT では、クラスター ヒープ内のクラスター チェーンについて説明する必要があります ( 表 11 を参照)。 クラスター チェーンは、ファイル、ディレクトリ、およびその他のファイル システム構造の内容を記録するための領域を提供する一連のクラスターです。 FAT は、クラスター チェーンをクラスター インデックスの 1 つのリンクされたリストとして表します。 最初の 2 つのエントリを除き、FAT 内のすべてのエントリは 1 つのクラスターを表します。
表 11 ファイル割り当てテーブルの構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
FatEntry[0] | 0 | 4 | このフィールドは必須であり、 セクション 4.1.1 ではその内容を定義します。 |
FatEntry[1] | 4 | 4 | このフィールドは必須であり、 セクション 4.1.2 ではその内容が定義されています。 |
FatEntry[2] | 8 | 4 | このフィールドは必須であり、 セクション 4.1.3 ではその内容が定義されています。 |
. . . |
. . . |
. . . |
. . . |
FatEntry[ClusterCount+1] | (ClusterCount + 1) * 4 | 4 | このフィールドは必須であり、 セクション 4.1.3 ではその内容が定義されています。 ClusterCount + 1 は FFFFFFF6h を超えることはできません。 注: メイン ブート セクターとバックアップ ブート セクターの両方に ClusterCount フィールドが含まれています。 |
ExcessSpace | (ClusterCount + 2) * 4 | (FatLength * 2BytesPerSectorShift) – ((ClusterCount + 2) * 4) | このフィールドは必須であり、その内容 (存在する場合) は未定義です。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも ClusterCount、FatLength、BytesPerSectorShift フィールドが含まれています。 |
4.1.1 FatEntry[0] フィールド
FatEntry[0] フィールドは、最初のバイト (最下位バイト) のメディアの種類を記述し、残りの 3 バイトに FFh を含む必要があります。
メディアの種類 (最初のバイト) は F8h にする必要があります。
4.1.2 FatEntry[1] フィールド
FatEntry[1] フィールドは、履歴の優先順位のためにのみ存在し、関心のあるものは記述しません。
このフィールドの有効な値は FFFFFFFFh です。 実装では、このフィールドを所定の値に初期化し、このフィールドを任意の目的で使用しないでください。 実装では、このフィールドを解釈せず、周囲のフィールドを変更する操作全体でその内容を保持する必要があります。
4.1.3 FatEntry[2] ...FatEntry[ClusterCount+1] フィールド
この配列の各 FatEntry フィールドは、クラスター ヒープ内のクラスターを表す必要があります。 FatEntry[2] はクラスター ヒープ内の最初のクラスターを表し、FatEntry[ClusterCount+1] はクラスター ヒープ内の最後のクラスターを表します。
これらのフィールドの有効な値の範囲は次のとおりです。
2 から ClusterCount + 1 の間(指定されたクラスター チェーン内の次の FatEntry を指す)指定された FatEntry は、指定されたクラスター チェーン内のその前にある FatEntry を指すものではありません
正確に FFFFFFF7h。指定された FatEntry の対応するクラスターを "無効" としてマークします
正確に FFFFFFFFh。指定された FatEntry の対応するクラスターをクラスター チェーンの最後のクラスターとしてマークします。これは、特定のクラスター チェーンの最後の FatEntry の唯一の有効な値です
5 データ領域
データ領域には、ファイル システムの構造、ディレクトリ、ファイルの管理領域を提供するクラスター ヒープが含まれています。
5.1 クラスター ヒープ サブリージョン
クラスター ヒープの構造は非常に単純です ( 表 12 を参照)。セクターPerClusterShift フィールドが定義するように、連続する各セクターは 1 つのクラスターを表します。 重要なのは、クラスター ヒープの最初のクラスターにはインデックス 2 があり、FatEntry[2] のインデックスに直接対応します。
exFAT ボリュームでは、割り当てビットマップ ( セクション 7.1.5 を参照) は、すべてのクラスターの割り当て状態のレコードを保持します。 これは、EXFAT の先行タスク (FAT12、FAT16、FAT32) とは大きな違いです。この場合、FAT はクラスター ヒープ内のすべてのクラスターの割り当て状態の記録を保持しています。
表 12 クラスター ヒープ構造
フィールド名 | Offset (セクター) |
[サイズ] (セクター) |
コメント |
---|---|---|---|
Cluster[2] | ClusterHeapOffset | 2セクターPerClusterShift | このフィールドは必須であり、 セクション 5.1.1 ではその内容を定義します。 注: メイン ブート セクターとバックアップ ブート セクターの両方に ClusterHeapOffset フィールドと SectorsPerClusterShift フィールドが含まれています。 |
. . . |
. . . |
. . . |
. . . |
Cluster[ClusterCount+1] | ClusterHeapOffset + (ClusterCount – 1) * 2セクターPerClusterShift | 2セクターPerClusterShift | このフィールドは必須であり、 セクション 5.1.1 ではその内容を定義します。 注: メイン ブート セクターとバックアップ ブート セクターには、どちらも ClusterCount、ClusterHeapOffset、および SectorsPerClusterShift フィールドが含まれています。 |
5.1.1 Cluster[2] ...Cluster[ClusterCount+1] フィールド
この配列内の各クラスター フィールドは連続する一連のセクターであり、そのサイズは SectorsPerClusterShift フィールドによって定義されます。
6 ディレクトリ構造
exFAT ファイル システムでは、ディレクトリ ツリーアプローチを使用して、クラスター ヒープに存在するファイル システムの構造とファイルを管理します。 ディレクトリ ツリー内の親と子の間には、ディレクトリに一対多のリレーションシップがあります。
FirstClusterOfRootDirectory フィールドが参照するディレクトリは、ディレクトリ ツリーのルートです。 その他のすべてのディレクトリは、個別にリンクされた方法でルート ディレクトリから派生します。
各ディレクトリは、一連のディレクトリ エントリで構成されます ( 表 13 を参照)。
1 つ以上のディレクトリ エントリが、ファイル システム構造、サブディレクトリ、ファイルなど、関心のあるものを記述するディレクトリ エントリ セットに結合されます。
表 13 ディレクトリ構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
DirectoryEntry[0] | 0 | 32 | このフィールドは必須であり、 セクション 6.1 ではその内容を定義します。 |
. . . |
. . . |
. . . |
. . . |
DirectoryEntry[N–1] | (N – 1) * 32 | 32 | このフィールドは必須であり、 セクション 6.1 ではその内容を定義します。 N (DirectoryEntry フィールドの数) は、指定されたディレクトリを含むクラスター チェーンのサイズ (バイト単位) を DirectoryEntry フィールドのサイズ (32 バイト) で割った値です。 |
6.1 DirectoryEntry[0] ...DirectoryEntry[N--1]
この配列の各 DirectoryEntry フィールドは、Generic DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
6.2 汎用ディレクトリエントリ テンプレート
Generic DirectoryEntry テンプレートは、ディレクトリ エントリの基本定義を提供します ( 表 14 を参照)。 すべてのディレクトリ エントリ構造はこのテンプレートから派生し、Microsoft が定義したディレクトリ エントリ構造のみが有効です (exFAT には、 セクション 7.8 および セクション 7.9 で定義されている場合を除き、製造元が定義したディレクトリ エントリ構造のプロビジョニングはありません)。 Generic DirectoryEntry テンプレートを解釈する機能は必須です。
表 14 汎用ディレクトリエントリ テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 6.2.1 ではその内容が定義されています。 |
CustomDefined | 1 | 19 | このフィールドは必須であり、このテンプレートから派生した構造体は、その内容を定義できます。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 6.2.2 ではその内容が定義されています。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 6.2.3 ではその内容が定義されています。 |
6.2.1 EntryType フィールド
EntryType フィールドには、フィールドの値が定義する 3 つの使用モードがあります (以下のリストを参照)。
00h。これはディレクトリの末尾のマーカーであり、次の条件が適用されます。
指定された DirectoryEntry 内の他のすべてのフィールドは、実際に予約されています
指定されたディレクトリ内の後続のすべてのディレクトリ エントリも、ディレクトリの末尾マーカーです
ディレクトリの末尾マーカーは、ディレクトリ エントリ セットの外部でのみ有効です
実装では、必要に応じてディレクトリの末尾マーカーが上書きされる可能性があります
01h から 7Fh の間 (未使用のディレクトリ エントリ マーカーであり、次の条件が適用されます)。
指定された DirectoryEntry 内の他のすべてのフィールドは、実際には未定義です
未使用のディレクトリ エントリは、ディレクトリ エントリ セットの外部でのみ有効です
実装では、必要に応じて未使用のディレクトリ エントリが上書きされる可能性があります
この値の範囲は、値 0 を含む InUse フィールド ( セクション 6.2.1.4 を参照) に対応しています
81h から FFh までの範囲で、通常のディレクトリ エントリであり、次の条件が適用されます。
EntryType フィールドの内容 ( 表 15 を参照) によって、DirectoryEntry 構造体の残りの部分のレイアウトが決まります
この値の範囲とこの値の範囲のみが、ディレクトリ エントリ セット内で有効です
この値の範囲は、値 1 を含む InUse フィールド ( セクション 6.2.1.4 を参照) に直接対応しています
InUse フィールドの変更 ( セクション 6.2.1.4 を参照) が誤ってディレクトリの末尾マーカーになるのを防ぐために、値 80h は無効です。
表 15 汎用 EntryType フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
TypeCode | 0 | 5 | このフィールドは必須であり、 セクション 6.2.1.1 では その内容が定義されています。 |
TypeImportance | 5 | 1 | このフィールドは必須であり、 セクション6.2.1.2 ではその内容を定義します。 |
TypeCategory | 6 | 1 | このフィールドは必須であり、 セクション 6.2.1.3 ではその内容が定義されています。 |
InUse | 7 | 1 | このフィールドは必須であり、 セクション 6.2.1.4 ではその内容が定義されています。 |
6.2.1.1 TypeCode フィールド
TypeCode フィールドは、指定されたディレクトリ エントリの特定の型を部分的に記述します。 このフィールドに加えて、TypeImportance フィールドと TypeCategory フィールド ( セクション 6.2.1.2 と セクション 6.2.1.3 を参照) は、指定されたディレクトリ エントリの種類を一意に識別します。
TypeImportance フィールドと TypeCategory フィールドの両方に値 0 が含まれていない限り、このフィールドに指定できる値はすべて有効です。その場合、このフィールドの値 0 は無効です。
6.2.1.2 TypeImportance フィールド
TypeImportance フィールドには、指定されたディレクトリ エントリの重要度を記述する必要があります。
このフィールドの有効な値は次のようになります。
0。これは、指定されたディレクトリ エントリがクリティカルであることを意味します (重要なプライマリディレクトリエントリとクリティカルセカンダリディレクトリエントリについては、 セクション6.3.1.2.1 および セクション6.4.1.2.1 を参照してください)
1。これは、指定されたディレクトリエントリが無害であることを意味します(無害なプライマリディレクトリエントリと無害なセカンダリディレクトリエントリについては、セクション6.3.1.2.2とセクション6.4.1.2.2を参照してください)
6.2.1.3 TypeCategory フィールド
TypeCategory フィールドには、指定されたディレクトリ エントリのカテゴリを記述する必要があります。
このフィールドの有効な値は次のようになります。
0。指定されたディレクトリ エントリがプライマリであることを意味します ( セクション 6.3 を参照)
1 は、指定されたディレクトリ エントリがセカンダリであることを意味します ( セクション 6.4 を参照)
6.2.1.4 InUse フィールド
InUse フィールドは、指定されたディレクトリ エントリが使用中かどうかを示す必要があります。
このフィールドの有効な値は次のようになります。
0。指定されたディレクトリ エントリが使用されていないことを意味します。これは、指定された構造体が実際には未使用のディレクトリ エントリであることを意味します
1 は、指定されたディレクトリ エントリが使用中であることを意味します。これは、指定された構造が通常のディレクトリ エントリであることを意味します
6.2.2 FirstCluster フィールド
FirstCluster フィールドには、指定されたディレクトリ エントリに関連付けられているクラスター ヒープ内の割り当ての最初のクラスターのインデックスが含まれている必要があります。
このフィールドの有効な値の範囲は次のとおりです。
正確に 0。つまり、クラスター割り当てが存在しません
2 から ClusterCount + 1 の間(有効なクラスター インデックスの範囲)
クラスター割り当てが派生構造と互換性がない場合、このテンプレートから派生した構造体は、FirstCluster フィールドと DataLength フィールドの両方を再定義できます。
6.2.3 DataLength フィールド
DataLength フィールドには、関連付けられているクラスター割り当てに含まれるデータのサイズ (バイト単位) が記述されます。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 0;FirstCluster フィールドに値 0 が含まれている場合、このフィールドの有効な値は 0 のみです。
最大 ClusterCount * 2セクターPerClusterShift* 2BytesPerSectorShift
このテンプレートから派生した構造体は、派生構造に対してクラスター割り当てが不可能な場合、FirstCluster フィールドと DataLength フィールドの両方を再定義できます。
6.3 汎用プライマリ ディレクトリエントリ テンプレート
ディレクトリ エントリ セット内の最初のディレクトリ エントリは、プライマリ ディレクトリ エントリである必要があります。 ディレクトリ エントリ セット内の後続のすべてのディレクトリ エントリ (存在する場合) は、セカンダリ ディレクトリ エントリである必要があります ( セクション 6.4 を参照)。
汎用プライマリ ディレクトリエントリ テンプレートを解釈する機能は必須です。
すべてのプライマリ ディレクトリ エントリ構造は、Generic Primary DirectoryEntry テンプレート ( 表 16 を参照) から派生します。これは、Generic DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
表 16 汎用プライマリ ディレクトリエントリ テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 6.3.1 ではその内容が定義されています。 |
SecondaryCount | 1 | 1 | このフィールドは必須であり、 セクション 6.3.2 ではその内容が定義されています。 |
SetChecksum | 2 | 2 | このフィールドは必須であり、 セクション 6.3.3 ではその内容が定義されています。 |
GeneralPrimaryFlags | 4 | 2 | このフィールドは必須であり、 セクション 6.3.4 ではその内容を定義します。 |
CustomDefined | 6 | 14 | このフィールドは必須であり、このテンプレートから派生した構造体は、その内容を定義します。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 6.3.5 ではその内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 6.3.6 ではその内容が定義されています。 |
6.3.1 EntryType フィールド
EntryType フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1 を参照)。
6.3.1.1 TypeCode フィールド
TypeCode フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.1 を参照)。
6.3.1.2 TypeImportance フィールド
TypeImportance フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.2 を参照)。
6.3.1.2.1 重要なプライマリ ディレクトリ エントリ
重要なプライマリ ディレクトリ エントリには、exFAT ボリュームの適切な管理に不可欠な情報が含まれています。 ルート ディレクトリにのみ重要なプライマリ ディレクトリ エントリが含まれています (ファイル ディレクトリ エントリは例外です。 セクション 7.4 を参照)。
重要なプライマリ ディレクトリ エントリの定義は、主要な exFAT リビジョン番号に関連付けられます。 実装では、すべての重要なプライマリ ディレクトリ エントリをサポートし、この仕様で定義されている重要なプライマリ ディレクトリ エントリ構造のみを記録する必要があります。
6.3.1.2.2 無害なプライマリ ディレクトリ エントリ
無害なプライマリ ディレクトリ エントリには、exFAT ボリュームの管理に役立つ可能性のある追加情報が含まれています。 任意のディレクトリに無害なプライマリ ディレクトリ エントリが含まれている可能性があります。
無害なプライマリ ディレクトリ エントリの定義は、マイナー exFAT リビジョン番号に関連付けられます。 この仕様または後続の仕様で定義されている無害なプライマリ ディレクトリ エントリのサポートは省略可能です。 認識されない無害なプライマリ ディレクトリ エントリは、ディレクトリ エントリ セット全体を認識不能としてレンダリングします (該当するディレクトリ エントリ テンプレートの定義を超えます)。
6.3.1.3 TypeCategory フィールド
TypeCategory フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.3 を参照)。
このテンプレートの場合、このフィールドの有効な値は 0 である必要があります。
6.3.1.4 InUse フィールド
InUse フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.4 を参照)。
6.3.2 SecondaryCount フィールド
SecondaryCount フィールドには、指定されたプライマリ ディレクトリ エントリの直後にあるセカンダリ ディレクトリ エントリの数を記述する必要があります。 これらのセカンダリ ディレクトリ エントリは、指定されたプライマリ ディレクトリ エントリと共に、ディレクトリ エントリ セットで構成されます。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 0。これは、このプライマリ ディレクトリ エントリがディレクトリ エントリ セット内の唯一のエントリであることを意味します
最大 255 個。つまり、次の 255 個のディレクトリ エントリと、このプライマリ ディレクトリ エントリがディレクトリ エントリ セットで構成されます
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造は、SecondaryCount フィールドと SetChecksum フィールドの両方を再定義できます。
6.3.3 SetChecksum フィールド
SetChecksum フィールドには、指定されたディレクトリ エントリ セット内のすべてのディレクトリ エントリのチェックサムが含まれている必要があります。 ただし、チェックサムではこのフィールドは除外されます ( 図 2 を参照)。 実装では、指定されたディレクトリ エントリ セット内の他のディレクトリ エントリを使用する前に、このフィールドの内容が有効であることを確認する必要があります。
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造は、SecondaryCount フィールドと SetChecksum フィールドの両方を再定義できます。
図 2 EntrySetChecksum 計算
UInt16 EntrySetChecksum
(
UCHAR * Entries, // points to an in-memory copy of the directory entry set
UCHAR SecondaryCount
)
{
UInt16 NumberOfBytes = ((UInt16)SecondaryCount + 1) * 32;
UInt16 Checksum = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
if ((Index == 2) || (Index == 3))
{
continue;
}
Checksum = ((Checksum&1) ? 0x8000 : 0) + (Checksum>>1) + (UInt16)Entries[Index];
}
return Checksum;
}
6.3.4 GeneralPrimaryFlags フィールド
GeneralPrimaryFlags フィールドにはフラグが含まれています ( 表 17 を参照)。
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造によって、このフィールドが再定義される場合があります。
表 17 汎用 GeneralPrimaryFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
AllocationPossible | 0 | 1 | このフィールドは必須であり、 セクション 6.3.4.1 ではその内容が定義されています。 |
NoFatChain | 1 | 1 | このフィールドは必須であり、 セクション 6.3.4.2 ではその内容が定義されています。 |
CustomDefined | 2 | 14 | このフィールドは必須であり、このテンプレートから派生した構造体でこのフィールドを定義できます。 |
6.3.4.1 AllocationPossible フィールド
AllocationPossible フィールドは、指定されたディレクトリ エントリに対してクラスター ヒープ内の割り当てが可能かどうかを示す必要があります。
このフィールドの有効な値は次のようになります。
0 は、クラスターの関連付けられた割り当てが不可能であり、FirstCluster フィールドと DataLength フィールドが実際には未定義であることを意味します (このテンプレートから派生した構造体は、これらのフィールドを再定義する可能性があります)
1 は、クラスターの関連付けられた割り当てが可能であり、FirstCluster フィールドと DataLength フィールドが定義されていることを意味します
6.3.4.2 NoFatChain フィールド
NoFatChain フィールドは、アクティブな FAT が指定された割り当てのクラスター チェーンを記述するかどうかを示す必要があります。
このフィールドの有効な値は次のようになります。
0 は、割り当てのクラスター チェーンに対応する FAT エントリが有効であることを意味し、実装ではそれらを解釈する必要があります。AllocationPossible フィールドに値 0 が含まれている場合、または AllocationPossible フィールドに値 1 が含まれており、FirstCluster フィールドに値 0 が含まれている場合、このフィールドの有効な値は 0 のみです。
1 は、関連付けられた割り当てが 1 つの連続した一連のクラスターであることを意味します。クラスターの対応する FAT エントリは無効であり、実装ではそれらを解釈しません。実装では、関連する割り当てのサイズを計算するために次の式を使用できます。DataLength / (2SectorsPerClusterShift* 2BytesPerSectorShift) は、最も近い整数に切り上げられます
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造が GeneralPrimaryFlags フィールドを再定義した場合、関連付けられている割り当てのクラスター チェーンに対応する FAT エントリが有効になります。
6.3.5 FirstCluster フィールド
FirstCluster フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.2 を参照)。
NoFatChain ビットが 1 の場合、FirstCluster はクラスター ヒープ内の有効なクラスターを指す必要があります。
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造は、FirstCluster フィールドと DataLength フィールドを再定義できます。 このテンプレートから派生する他の構造体では、AllocationPossible フィールドに値 0 が含まれている場合にのみ、FirstCluster フィールドと DataLength フィールドを再定義できます。
6.3.6 DataLength フィールド
DataLength フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.3 を参照)。
NoFatChain ビットが 1 の場合、DataLength を 0 にすることはできません。 FirstCluster フィールドが 0 の場合、DataLength も 0 である必要があります。
このテンプレートから派生した重要なプライマリ ディレクトリ エントリ構造は、FirstCluster フィールドと DataLength フィールドを再定義できます。 このテンプレートから派生する他の構造体では、AllocationPossible フィールドに値 0 が含まれている場合にのみ、FirstCluster フィールドと DataLength フィールドを再定義できます。
6.4 汎用セカンダリ ディレクトリエントリ テンプレート
セカンダリ ディレクトリ エントリの中心的な目的は、ディレクトリ エントリ セットに関する追加情報を提供することです。 汎用セカンダリ ディレクトリエントリ テンプレートを解釈する機能は必須です。
重要なセカンダリ ディレクトリ エントリと無害なセカンダリ ディレクトリ エントリの両方の定義は、マイナー exFAT リビジョン番号に関連付けられます。 この仕様または後続の仕様で定義されている重要なセカンダリ ディレクトリ エントリまたは無害なセカンダリ ディレクトリ エントリのサポートは省略可能です。
すべてのセカンダリ ディレクトリ エントリ構造は、Generic Secondary DirectoryEntry テンプレート ( 表 18 を参照) から派生します。これは、Generic DirectoryEntry テンプレートから派生します ( セクション 6.2 を参照)。
表 18 汎用セカンダリ ディレクトリエントリ テンプレート
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 6.4.1 ではその内容を定義します。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 6.4.2 ではその内容が定義されています。 |
CustomDefined | 2 | 18 | このフィールドは必須であり、このテンプレートから派生した構造体は、その内容を定義します。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 6.4.3 ではその内容が定義されています。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 6.4.4 では内容が定義されています。 |
6.4.1 EntryType フィールド
EntryType フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1 を参照)
6.4.1.1 TypeCode フィールド
TypeCode フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.1 を参照)。
6.4.1.2 TypeImportance フィールド
TypeImportance フィールドは、Generic DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.2 を参照)。
6.4.1.2.1 重要なセカンダリ ディレクトリ エントリ
重要なセカンダリ ディレクトリ エントリには、その包含ディレクトリ エントリ セットの適切な管理に不可欠な情報が含まれています。 特定の重要なセカンダリ ディレクトリ エントリのサポートは省略可能ですが、認識されない重要なディレクトリ エントリでは、ディレクトリ エントリ セット全体が認識されない (該当するディレクトリ エントリ テンプレートの定義を超えて) レンダリングされます。
ただし、ディレクトリ エントリ セットに、実装で認識されない重要なセカンダリ ディレクトリ エントリが少なくとも 1 つ含まれている場合、実装では、ディレクトリ エントリ セット内のディレクトリ エントリのテンプレートが解釈され、ディレクトリ エントリ セット内のディレクトリ エントリに関連付けられている割り当てに含まれるデータは解釈されません (ファイル ディレクトリ エントリは例外です。 セクション 7.4 を参照してください。
6.4.1.2.2 無害なセカンダリ ディレクトリ エントリ
無害なセカンダリ ディレクトリ エントリには追加情報が含まれています。これは、含まれるディレクトリ エントリ セットを管理するのに役立つ可能性があります。 特定の無害なセカンダリ ディレクトリ エントリのサポートは省略可能です。 認識できない無害なセカンダリ ディレクトリ エントリは、ディレクトリ エントリ セット全体を認識できないものとしてレンダリングしません。
実装では、認識されない無害なセカンダリ エントリが無視される場合があります。
6.4.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用 DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.2.1.3 を参照)。
このテンプレートの場合、このフィールドの有効な値は 1 です。
6.4.1.4 InUse フィールド
InUse フィールドは、汎用 DirectoryEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.2.1.4 を参照)。
6.4.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドにはフラグが含まれています ( 表 19 を参照)。
表 19 汎用 GeneralSecondaryFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
AllocationPossible | 0 | 1 | このフィールドは必須であり、 セクション 6.4.2.1 ではその内容を定義します。 |
NoFatChain | 1 | 1 | このフィールドは必須であり、 セクション 6.4.2.2 ではその内容を定義します。 |
CustomDefined | 2 | 6 | このフィールドは必須であり、このテンプレートから派生した構造体はこのフィールドを定義できます。 |
6.4.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用 Primary DirectoryEntry テンプレートの同じ名前のフィールドと同じ定義を持つ必要があります ( セクション 6.3.4.1 を参照)。
6.4.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用 Primary DirectoryEntry テンプレートの同じ名前付きフィールドと同じ定義を持つ必要があります ( セクション 6.3.4.2 を参照)。
6.4.3 FirstCluster フィールド
FirstCluster フィールドは、汎用 DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.2.2 を参照)。
NoFatChain ビットが 1 の場合、FirstCluster はクラスター ヒープ内の有効なクラスターを指す必要があります。
6.4.4 DataLength フィールド
DataLength フィールドは、汎用 DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.2.3 を参照)。
NoFatChain ビットが 1 の場合、DataLength を 0 にすることはできません。 FirstCluster フィールドが 0 の場合、DataLength も 0 である必要があります。
7 ディレクトリ エントリの定義
exFAT ファイル システムのリビジョン 1.00 では、次のディレクトリ エントリが定義されています。
重要なプライマリ
無害なプライマリ
ボリューム GUID (セクション 7.5)
TexFAT パディング (セクション 7.10)
重要なセカンダリ
無害なセカンダリ
7.1 割り当てビットマップディレクトリエントリ
exFAT ファイル システムでは、FAT はクラスターの割り当て状態を記述しません。ではなく、割り当てビットマップが行います。 割り当てビットマップはクラスター ヒープに存在し ( セクション 7.1.5 を参照)、ルート ディレクトリに対応する重要なプライマリ ディレクトリ エントリがあります ( 表 20 を参照)。
NumberOfFats フィールドは、ルート ディレクトリ内の有効な割り当てビットマップ ディレクトリ エントリの数を決定します。 NumberOfFats フィールドに値 1 が含まれている場合、割り当てビットマップ ディレクトリ エントリの有効な数は 1 のみです。 さらに、1 つの割り当てビットマップ ディレクトリ エントリは、最初の割り当てビットマップを記述している場合にのみ有効です ( セクション 7.1.2.1 を参照)。 NumberOfFats フィールドに値 2 が含まれている場合、割り当てビットマップ ディレクトリ エントリの有効な数は 2 のみです。 さらに、2 つの割り当てビットマップ ディレクトリ エントリは、一方が最初の割り当てビットマップを記述し、もう一方が 2 番目の割り当てビットマップを記述する場合にのみ有効です。
表 20 割り当てビットマップ ディレクトリEntry 構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.1.1 ではその内容を定義します。 |
BitmapFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.1.2 ではその内容を定義します。 |
予約されています。 | 2 | 18 | このフィールドは必須であり、その内容は予約されています。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 7.1.3 ではその内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 7.1.4 ではその内容を定義します。 |
7.1.1 EntryType フィールド
EntryType フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1 を参照)。
7.1.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.1 を参照)。
割り当てビットマップ ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.1.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.2 を参照)。
割り当てビットマップ ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.1.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.3 を参照)。
7.1.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.4 を参照)。
7.1.2 BitmapFlags フィールド
BitmapFlags フィールドにはフラグが含まれています ( 表 21 を参照)。
表 21 BitmapFlags フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
BitmapIdentifier | 0 | 1 | このフィールドは必須であり、 セクション 7.1.2.1 ではその内容を定義します。 |
予約済み | 1 | 7 | このフィールドは必須であり、その内容は予約されています。 |
7.1.2.1 BitmapIdentifier フィールド
BitmapIdentifier フィールドは、指定されたディレクトリ エントリが記述する割り当てビットマップを示す必要があります。 実装では、最初の FAT と組み合わせて最初の割り当てビットマップを使用し、2 番目の FAT と組み合わせて 2 番目の割り当てビットマップを使用する必要があります。 [ActiveFat] フィールドには、アクティブな FAT および割り当てビットマップが示されます。
このフィールドの有効な値は次のとおりです。
0。指定されたディレクトリ エントリが最初の割り当てビットマップを記述します。
1。これは、指定されたディレクトリ エントリが 2 番目の割り当てビットマップを記述し、NumberOfFats に値 2 が含まれている場合にのみ可能であることを意味します
7.1.3 FirstCluster フィールド
FirstCluster フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.5 を参照)。
このフィールドには、割り当てビットマップをホストする FAT が説明するように、クラスター チェーンの最初のクラスターのインデックスが含まれます。
7.1.4 DataLength フィールド
DataCluster フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.3.6 を参照)。
7.1.5 割り当てビットマップ
割り当てビットマップは、クラスター ヒープ内のクラスターの割り当て状態を記録します。 割り当てビットマップ内の各ビットは、対応するクラスターが割り当てに使用できるかどうかを示します。
割り当てビットマップは、最低から最高のインデックスまでのクラスターを表します ( 表 22 を参照)。 履歴上の理由から、最初のクラスターにはインデックス 2 があります。 注: ビットマップの最初のビットは、最初のバイトの最下位ビットです。
表 22 割り当てビットマップ構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
BitmapEntry[2] | 0 | 1 | このフィールドは必須であり、 セクション7.1.5.1 ではその内容を定義します。 |
. . . |
. . . |
. . . |
. . . |
BitmapEntry[ClusterCount+1] | ClusterCount - 1 | 1 | このフィールドは必須であり、 セクション 7.1.5.1 ではその内容を定義します。 注: メイン ブート セクターとバックアップ ブート セクターの両方に ClusterCount フィールドが含まれています。 |
予約済み | ClusterCount | (DataLength * 8) – ClusterCount | このフィールドは必須であり、その内容がある場合は予約されています。 注: メイン ブート セクターとバックアップ ブート セクターの両方に ClusterCount フィールドが含まれています。 |
7.1.5.1 BitmapEntry[2] ...BitmapEntry[ClusterCount+1] フィールド
この配列の各 BitmapEntry フィールドは、クラスター ヒープ内のクラスターを表します。 BitmapEntry[2] はクラスター ヒープ内の最初のクラスターを表し、BitmapEntry[ClusterCount+1] はクラスター ヒープ内の最後のクラスターを表します。
これらのフィールドの有効な値は次のとおりです。
割り当て可能な対応するクラスターを記述する 0
1。対応するクラスターを割り当てに使用できないと記述します (クラスターの割り当てで対応するクラスターが既に使用されているか、アクティブな FAT が対応するクラスターを不適切と記述している可能性があります)
7.2 アップケーステーブルディレクトリエントリ
Up-case Table は、小文字から大文字への変換を定義します。 これは、Unicode 文字を使用するファイル名ディレクトリ エントリ (セクション 7.7 を参照) と exFAT ファイル システムで大文字と小文字が区別されず、大文字と小文字が保持されるために重要です。 アップケース テーブルはクラスター ヒープに存在し ( セクション 7.2.5 を参照)、ルート ディレクトリに対応する重要なプライマリ ディレクトリ エントリがあります ( 表 23 を参照)。 Up-case Table ディレクトリ エントリの有効な数は 1 です。
Up-case テーブルとファイル名の関係により、実装では、書式操作の結果としてを除き、アップケース テーブルを変更しないでください。
表 23 Up-case Table DirectoryEntry 構造体
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.2.1 ではその内容を定義します。 |
Reserved1 | 1 | 3 | このフィールドは必須であり、その内容は予約されています。 |
TableChecksum | 4 | 4 | このフィールドは必須であり、 セクション 7.2.2 ではその内容が定義されています。 |
Reserved2 | 8 | 12 | このフィールドは必須であり、その内容は予約されています。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 7.2.3 ではその内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 7.2.4 ではその内容を定義します。 |
7.2.1 EntryType フィールド
EntryType フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1 を参照)。
7.2.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.1 を参照)。
Up-case Table ディレクトリ エントリの場合、このフィールドの有効な値は 2 です。
7.2.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.2 を参照)。
Up-case Table ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.2.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.3 を参照)。
7.2.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.4 を参照)。
7.2.2 TableChecksum フィールド
TableChecksum フィールドには、アップケース テーブル (FirstCluster フィールドと DataLength フィールドが記述する) のチェックサムが含まれています。 実装では、アップケース テーブルを使用する前に、このフィールドの内容が有効であることを確認する必要があります。
図 3 TableChecksum の計算
UInt32 TableChecksum
(
UCHAR * Table, // points to an in-memory copy of the up-case table
UInt64 DataLength
)
{
UInt32 Checksum = 0;
UInt64 Index;
for (Index = 0; Index < DataLength; Index++)
{
Checksum = ((Checksum&1) ? 0x80000000 : 0) + (Checksum>>1) + (UInt32)Table[Index];
}
return Checksum;
}
7.2.3 FirstCluster フィールド
FirstCluster フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.5 を参照)。
このフィールドには、UP-case テーブルをホストする FAT が説明するように、クラスター チェーンの最初のクラスターのインデックスが含まれます。
7.2.4 DataLength フィールド
DataCluster フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.3.6 を参照)。
7.2.5 アップケーステーブル
アップケース テーブルは、一連の Unicode 文字マッピングです。 文字マッピングは 2 バイトのフィールドで構成され、アップケース テーブル内のフィールドのインデックスは、大文字と小文字が区別される Unicode 文字を表し、2 バイトのフィールドはアップケース Unicode 文字を表します。
最初の 128 文字の Unicode 文字には、必須のマッピングがあります ( 表 24 を参照)。 最初の 128 文字のいずれかに対して他の文字マッピングがあるアップケース テーブルは無効です。
必須マッピング範囲の文字のみをサポートする実装では、アップケース テーブルの残りの部分のマッピングが無視される場合があります。 このような実装では、ファイルの作成時または名前変更時に、必須マッピング範囲の文字のみを使用する必要があります (ファイル名ディレクトリエントリを介して、 セクション 7.7 を参照)。 既存のファイル名を大文字と小文字を区別する場合、このような実装では、必須ではないマッピング範囲の大文字と小文字は区別されませんが、結果のアップケースファイル名はそのまま残します (これは部分的な大文字と小文字です)。 ファイル名を比較する場合、このような実装では、比較対象の名前と異なるファイル名は、非必須マッピング範囲の Unicode 文字によってのみ同等として扱われます。 このようなファイル名は同等である可能性はありますが、このような実装では、完全に大文字と小文字が区別されたファイル名が比較対象の名前と競合しないようにすることはできません。
表 24 必須の最初の 128 個の大文字と小文字のテーブル エントリ
テーブル インデックス | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
(注: ID 以外の大文字と小文字のマッピングが含まれるエントリは太字です)
Unicode 文字空間の大部分には大文字と小文字の概念がないため、ボリュームの書式設定時に、実装では ID マッピング圧縮を使用して圧縮形式のアップケース テーブルが生成されることがあります (つまり、"小文字" と "大文字" の文字は同等です)。 実装では、一連の ID マッピングを FFFFh 値に続けて ID マッピングの数で表すことによって、アップケース テーブルを圧縮します。
たとえば、実装は最初の 100 (64h) 文字マッピングを表し、圧縮された大文字と小文字のテーブルの次の 8 つのエントリを表します。
FFFFh, 0061h, 0041h, 0042h, 0043h
最初の 2 つのエントリは、最初の 97 (61h) 文字 (0000h から 0060h) に ID マッピングがあることを示します。 後続の文字 (0061h から 0063h) は、それぞれ 0041h から 0043h の文字にマップされます。
ボリュームの書式設定時に圧縮されたアップケース テーブルを提供する機能は省略可能です。 ただし、非圧縮テーブルと圧縮アップケース テーブルの両方を解釈する機能は必須です。 TableChecksum フィールドの値は、ボリューム上にアップケース テーブルがどのように存在するかに常に一致します。これは、圧縮形式または非圧縮形式のいずれかになります。
7.2.5.1 推奨されるアップケーステーブル
ボリュームを書式設定する場合、実装では、推奨されるアップケース テーブルを圧縮形式で記録する必要があります ( 表 25 を参照)。TableChecksum フィールドの値は E619D30Dh です。
実装で独自のアップケース テーブル (圧縮または非圧縮) が定義されている場合、そのテーブルは完全な Unicode 文字範囲 (文字コード 0000h から FFFFh まで) をカバーする必要があります。
表 25 圧縮形式の推奨されるアップケース テーブル
生オフセット | + 0 | + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 |
---|---|---|---|---|---|---|---|---|
0000h | 0000h | 0001h | 0002h | 0003h | 0004h | 0005h | 0006h | 0007h |
0008h | 0008h | 0009h | 000Ah | 000Bh | 000Ch | 000Dh | 000Eh | 000Fh |
0010h | 0010h | 0011h | 0012h | 0013h | 0014h | 0015h | 0016h | 0017h |
0018h | 0018h | 0019h | 001Ah | 001Bh | 001Ch | 001Dh | 001Eh | 001Fh |
0020h | 0020h | 0021h | 0022h | 0023h | 0024h | 0025h | 0026h | 0027h |
0028h | 0028h | 0029h | 002Ah | 002Bh | 002Ch | 002Dh | 002Eh | 002Fh |
0030h | 0030h | 0031h | 0032h | 0033h | 0034h | 0035h | 0036h | 0037h |
0038h | 0038h | 0039h | 003Ah | 003Bh | 003Ch | 003Dh | 003Eh | 003Fh |
0040h | 0040h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0048h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0050h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0058h | 0058h | 0059h | 005Ah | 005Bh | 005Ch | 005Dh | 005Eh | 005Fh |
0060h | 0060h | 0041h | 0042h | 0043h | 0044h | 0045h | 0046h | 0047h |
0068h | 0048h | 0049h | 004Ah | 004Bh | 004Ch | 004Dh | 004Eh | 004Fh |
0070h | 0050h | 0051h | 0052h | 0053h | 0054h | 0055h | 0056h | 0057h |
0078h | 0058h | 0059h | 005Ah | 007Bh | 007Ch | 007Dh | 007Eh | 007Fh |
0080h | 0080h | 0081h | 0082h | 0083h | 0084h | 0085h | 0086h | 0087h |
0088h | 0088h | 0089h | 008Ah | 008Bh | 008Ch | 008Dh | 008Eh | 008Fh |
0090h | 0090h | 0091h | 0092h | 0093h | 0094h | 0095h | 0096h | 0097h |
0098h | 0098h | 0099h | 009Ah | 009Bh | 009Ch | 009Dh | 009Eh | 009Fh |
00A0h | 00A0h | 00A1h | 00A2h | 00A3h | 00A4h | 00A5h | 00A6h | 00A7h |
00A8h | 00A8h | 00A9h | 00AAh | 00ABh | 00ACh | 00ADh | 00AEh | 00AFh |
00B0h | 00B0h | 00B1h | 00B2h | 00B3h | 00B4h | 00B5h | 00B6h | 00B7h |
00B8h | 00B8h | 00B9h | 00BAh | 00BBh | 00BCh | 00BDh | 00BEh | 00BFh |
00C0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00C8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00D0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00D7h |
00D8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 00DFh |
00E0h | 00C0h | 00C1h | 00C2h | 00C3h | 00C4h | 00C5h | 00C6h | 00C7h |
00E8h | 00C8h | 00C9h | 00CAh | 00CBh | 00CCh | 00CDh | 00CEh | 00CFh |
00F0h | 00D0h | 00D1h | 00D2h | 00D3h | 00D4h | 00D5h | 00D6h | 00F7h |
00F8h | 00D8h | 00D9h | 00DAh | 00DBh | 00DCh | 00DDh | 00DEh | 0178h |
0100h | 0100h | 0100h | 0102h | 0102h | 0104h | 0104h | 0106h | 0106h |
0108h | 0108h | 0108h | 010Ah | 010Ah | 010Ch | 010Ch | 010Eh | 010Eh |
0110h | 0110h | 0110h | 0112h | 0112h | 0114h | 0114h | 0116h | 0116h |
0118h | 0118h | 0118h | 011Ah | 011Ah | 011Ch | 011Ch | 011Eh | 011Eh |
0120h | 0120h | 0120h | 0122h | 0122h | 0124h | 0124h | 0126h | 0126h |
0128h | 0128h | 0128h | 012Ah | 012Ah | 012Ch | 012Ch | 012Eh | 012Eh |
0130h | 0130h | 0131h | 0132h | 0132h | 0134h | 0134h | 0136h | 0136h |
0138h | 0138h | 0139h | 0139h | 013Bh | 013Bh | 013Dh | 013Dh | 013Fh |
0140h | 013Fh | 0141h | 0141h | 0143h | 0143h | 0145h | 0145h | 0147h |
0148h | 0147h | 0149h | 014Ah | 014Ah | 014Ch | 014Ch | 014Eh | 014Eh |
0150h | 0150h | 0150h | 0152h | 0152h | 0154h | 0154h | 0156h | 0156h |
0158h | 0158h | 0158h | 015Ah | 015Ah | 015Ch | 015Ch | 015Eh | 015Eh |
0160h | 0160h | 0160h | 0162h | 0162h | 0164h | 0164h | 0166h | 0166h |
0168h | 0168h | 0168h | 016Ah | 016Ah | 016Ch | 016Ch | 016Eh | 016Eh |
0170h | 0170h | 0170h | 0172h | 0172h | 0174h | 0174h | 0176h | 0176h |
0178h | 0178h | 0179h | 0179h | 017Bh | 017Bh | 017Dh | 017Dh | 017Fh |
0180h | 0243h | 0181h | 0182h | 0182h | 0184h | 0184h | 0186h | 0187h |
0188h | 0187h | 0189h | 018Ah | 018Bh | 018Bh | 018Dh | 018Eh | 018Fh |
0190h | 0190h | 0191h | 0191h | 0193h | 0194h | 01F6h | 0196h | 0197h |
0198h | 0198h | 0198h | 023Dh | 019Bh | 019Ch | 019Dh | 0220h | 019Fh |
01A0h | 01A0h | 01A0h | 01A2h | 01A2h | 01A4h | 01A4h | 01A6h | 01A7h |
01A8h | 01A7h | 01A9h | 01AAh | 01ABh | 01ACh | 01ACh | 01AEh | 01AFh |
01B0h | 01AFh | 01B1h | 01B2h | 01B3h | 01B3h | 01B5h | 01B5h | 01B7h |
01B8h | 01B8h | 01B8h | 01BAh | 01BBh | 01BCh | 01BCh | 01BEh | 01F7h |
01C0h | 01C0h | 01C1h | 01C2h | 01C3h | 01C4h | 01C5h | 01C4h | 01C7h |
01C8h | 01C8h | 01C7h | 01CAh | 01CBh | 01CAh | 01CDh | 01CDh | 01CFh |
01D0h | 01CFh | 01D1h | 01D1h | 01D3h | 01D3h | 01D5h | 01D5h | 01D7h |
01D8h | 01D7h | 01D9h | 01D9h | 01DBh | 01DBh | 018Eh | 01DEh | 01DEh |
01E0h | 01E0h | 01E0h | 01E2h | 01E2h | 01E4h | 01E4h | 01E6h | 01E6h |
01E8h | 01E8h | 01E8h | 01EAh | 01EAh | 01ECh | 01ECh | 01EEh | 01EEh |
01F0h | 01F0h | 01F1h | 01F2h | 01F1h | 01F4h | 01F4h | 01F6h | 01F7h |
01F8h | 01F8h | 01F8h | 01FAh | 01FAh | 01FCh | 01FCh | 01FEh | 01FEh |
0200h | 0200h | 0200h | 0202h | 0202h | 0204h | 0204h | 0206h | 0206h |
0208h | 0208h | 0208h | 020Ah | 020Ah | 020Ch | 020Ch | 020Eh | 020Eh |
0210h | 0210h | 0210h | 0212h | 0212h | 0214h | 0214h | 0216h | 0216h |
0218h | 0218h | 0218h | 021Ah | 021Ah | 021Ch | 021Ch | 021Eh | 021Eh |
0220h | 0220h | 0221h | 0222h | 0222h | 0224h | 0224h | 0226h | 0226h |
0228h | 0228h | 0228h | 022Ah | 022Ah | 022Ch | 022Ch | 022Eh | 022Eh |
0230h | 0230h | 0230h | 0232h | 0232h | 0234h | 0235h | 0236h | 0237h |
0238h | 0238h | 0239h | 2C65h | 023Bh | 023Bh | 023Dh | 2C66h | 023Fh |
0240h | 0240h | 0241h | 0241h | 0243h | 0244h | 0245h | 0246h | 0246h |
0248h | 0248h | 0248h | 024Ah | 024Ah | 024Ch | 024Ch | 024Eh | 024Eh |
0250h | 0250h | 0251h | 0252h | 0181h | 0186h | 0255h | 0189h | 018Ah |
0258h | 0258h | 018Fh | 025Ah | 0190h | 025Ch | 025Dh | 025Eh | 025Fh |
0260h | 0193h | 0261h | 0262h | 0194h | 0264h | 0265h | 0266h | 0267h |
0268h | 0197h | 0196h | 026Ah | 2C62h | 026Ch | 026Dh | 026Eh | 019Ch |
0270h | 0270h | 0271h | 019Dh | 0273h | 0274h | 019Fh | 0276h | 0277h |
0278h | 0278h | 0279h | 027Ah | 027Bh | 027Ch | 2C64h | 027Eh | 027Fh |
0280h | 01A6h | 0281h | 0282h | 01A9h | 0284h | 0285h | 0286h | 0287h |
0288h | 01AEh | 0244h | 01B1h | 01B2h | 0245h | 028Dh | 028Eh | 028Fh |
0290h | 0290h | 0291h | 01B7h | 0293h | 0294h | 0295h | 0296h | 0297h |
0298h | 0298h | 0299h | 029Ah | 029Bh | 029Ch | 029Dh | 029Eh | 029Fh |
02A0h | 02A0h | 02A1h | 02A2h | 02A3h | 02A4h | 02A5h | 02A6h | 02A7h |
02A8h | 02A8h | 02A9h | 02AAh | 02ABh | 02ACh | 02ADh | 02AEh | 02AFh |
02B0h | 02B0h | 02B1h | 02B2h | 02B3h | 02B4h | 02B5h | 02B6h | 02B7h |
02B8h | 02B8h | 02B9h | 02BAh | 02BBh | 02BCh | 02BDh | 02BEh | 02BFh |
02C0h | 02C0h | 02C1h | 02C2h | 02C3h | 02C4h | 02C5h | 02C6h | 02C7h |
02C8h | 02C8h | 02C9h | 02CAh | 02CBh | 02CCh | 02CDh | 02CEh | 02CFh |
02D0h | 02D0h | 02D1h | 02D2h | 02D3h | 02D4h | 02D5h | 02D6h | 02D7h |
02D8h | 02D8h | 02D9h | 02DAh | 02DBh | 02DCh | 02DDh | 02DEh | 02DFh |
02E0h | 02E0h | 02E1h | 02E2h | 02E3h | 02E4h | 02E5h | 02E6h | 02E7h |
02E8h | 02E8h | 02E9h | 02EAh | 02EBh | 02ECh | 02EDh | 02EEh | 02EFh |
02F0h | 02F0h | 02F1h | 02F2h | 02F3h | 02F4h | 02F5h | 02F6h | 02F7h |
02F8h | 02F8h | 02F9h | 02FAh | 02FBh | 02FCh | 02FDh | 02FEh | 02FFh |
0300h | 0300h | 0301h | 0302h | 0303h | 0304h | 0305h | 0306h | 0307h |
0308h | 0308h | 0309h | 030Ah | 030Bh | 030Ch | 030Dh | 030Eh | 030Fh |
0310h | 0310h | 0311h | 0312h | 0313h | 0314h | 0315h | 0316h | 0317h |
0318h | 0318h | 0319h | 031Ah | 031Bh | 031Ch | 031Dh | 031Eh | 031Fh |
0320h | 0320h | 0321h | 0322h | 0323h | 0324h | 0325h | 0326h | 0327h |
0328h | 0328h | 0329h | 032Ah | 032Bh | 032Ch | 032Dh | 032Eh | 032Fh |
0330h | 0330h | 0331h | 0332h | 0333h | 0334h | 0335h | 0336h | 0337h |
0338h | 0338h | 0339h | 033Ah | 033Bh | 033Ch | 033Dh | 033Eh | 033Fh |
0340h | 0340h | 0341h | 0342h | 0343h | 0344h | 0345h | 0346h | 0347h |
0348h | 0348h | 0349h | 034Ah | 034Bh | 034Ch | 034Dh | 034Eh | 034Fh |
0350h | 0350h | 0351h | 0352h | 0353h | 0354h | 0355h | 0356h | 0357h |
0358h | 0358h | 0359h | 035Ah | 035Bh | 035Ch | 035Dh | 035Eh | 035Fh |
0360h | 0360h | 0361h | 0362h | 0363h | 0364h | 0365h | 0366h | 0367h |
0368h | 0368h | 0369h | 036Ah | 036Bh | 036Ch | 036Dh | 036Eh | 036Fh |
0370h | 0370h | 0371h | 0372h | 0373h | 0374h | 0375h | 0376h | 0377h |
0378h | 0378h | 0379h | 037Ah | 03FDh | 03FEh | 03FFh | 037Eh | 037Fh |
0380h | 0380h | 0381h | 0382h | 0383h | 0384h | 0385h | 0386h | 0387h |
0388h | 0388h | 0389h | 038Ah | 038Bh | 038Ch | 038Dh | 038Eh | 038Fh |
0390h | 0390h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
0398h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03A0h | 03A0h | 03A1h | 03A2h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03A8h | 03A8h | 03A9h | 03AAh | 03ABh | 0386h | 0388h | 0389h | 038Ah |
03B0h | 03B0h | 0391h | 0392h | 0393h | 0394h | 0395h | 0396h | 0397h |
03B8h | 0398h | 0399h | 039Ah | 039Bh | 039Ch | 039Dh | 039Eh | 039Fh |
03C0h | 03A0h | 03A1h | 03A3h | 03A3h | 03A4h | 03A5h | 03A6h | 03A7h |
03C8h | 03A8h | 03A9h | 03AAh | 03ABh | 038Ch | 038Eh | 038Fh | 03CFh |
03D0h | 03D0h | 03D1h | 03D2h | 03D3h | 03D4h | 03D5h | 03D6h | 03D7h |
03D8h | 03D8h | 03D8h | 03DAh | 03DAh | 03DCh | 03DCh | 03DEh | 03DEh |
03E0h | 03E0h | 03E0h | 03E2h | 03E2h | 03E4h | 03E4h | 03E6h | 03E6h |
03E8h | 03E8h | 03E8h | 03EAh | 03EAh | 03ECh | 03ECh | 03EEh | 03EEh |
03F0h | 03F0h | 03F1h | 03F9h | 03F3h | 03F4h | 03F5h | 03F6h | 03F7h |
03F8h | 03F7h | 03F9h | 03FAh | 03FAh | 03FCh | 03FDh | 03FEh | 03FFh |
0400h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0408h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0410h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0418h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0420h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0428h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0430h | 0410h | 0411h | 0412h | 0413h | 0414h | 0415h | 0416h | 0417h |
0438h | 0418h | 0419h | 041Ah | 041Bh | 041Ch | 041Dh | 041Eh | 041Fh |
0440h | 0420h | 0421h | 0422h | 0423h | 0424h | 0425h | 0426h | 0427h |
0448h | 0428h | 0429h | 042Ah | 042Bh | 042Ch | 042Dh | 042Eh | 042Fh |
0450h | 0400h | 0401h | 0402h | 0403h | 0404h | 0405h | 0406h | 0407h |
0458h | 0408h | 0409h | 040Ah | 040Bh | 040Ch | 040Dh | 040Eh | 040Fh |
0460h | 0460h | 0460h | 0462h | 0462h | 0464h | 0464h | 0466h | 0466h |
0468h | 0468h | 0468h | 046Ah | 046Ah | 046Ch | 046Ch | 046Eh | 046Eh |
0470h | 0470h | 0470h | 0472h | 0472h | 0474h | 0474h | 0476h | 0476h |
0478h | 0478h | 0478h | 047Ah | 047Ah | 047Ch | 047Ch | 047Eh | 047Eh |
0480h | 0480h | 0480h | 0482h | 0483h | 0484h | 0485h | 0486h | 0487h |
0488h | 0488h | 0489h | 048Ah | 048Ah | 048Ch | 048Ch | 048Eh | 048Eh |
0490h | 0490h | 0490h | 0492h | 0492h | 0494h | 0494h | 0496h | 0496h |
0498h | 0498h | 0498h | 049Ah | 049Ah | 049Ch | 049Ch | 049Eh | 049Eh |
04A0h | 04A0h | 04A0h | 04A2h | 04A2h | 04A4h | 04A4h | 04A6h | 04A6h |
04A8h | 04A8h | 04A8h | 04AAh | 04AAh | 04ACh | 04ACh | 04AEh | 04AEh |
04B0h | 04B0h | 04B0h | 04B2h | 04B2h | 04B4h | 04B4h | 04B6h | 04B6h |
04B8h | 04B8h | 04B8h | 04BAh | 04BAh | 04BCh | 04BCh | 04BEh | 04BEh |
04C0h | 04C0h | 04C1h | 04C1h | 04C3h | 04C3h | 04C5h | 04C5h | 04C7h |
04C8h | 04C7h | 04C9h | 04C9h | 04CBh | 04CBh | 04CDh | 04CDh | 04C0h |
04D0h | 04D0h | 04D0h | 04D2h | 04D2h | 04D4h | 04D4h | 04D6h | 04D6h |
04D8h | 04D8h | 04D8h | 04DAh | 04DAh | 04DCh | 04DCh | 04DEh | 04DEh |
04E0h | 04E0h | 04E0h | 04E2h | 04E2h | 04E4h | 04E4h | 04E6h | 04E6h |
04E8h | 04E8h | 04E8h | 04EAh | 04EAh | 04ECh | 04ECh | 04EEh | 04EEh |
04F0h | 04F0h | 04F0h | 04F2h | 04F2h | 04F4h | 04F4h | 04F6h | 04F6h |
04F8h | 04F8h | 04F8h | 04FAh | 04FAh | 04FCh | 04FCh | 04FEh | 04FEh |
0500h | 0500h | 0500h | 0502h | 0502h | 0504h | 0504h | 0506h | 0506h |
0508h | 0508h | 0508h | 050Ah | 050Ah | 050Ch | 050Ch | 050Eh | 050Eh |
0510h | 0510h | 0510h | 0512h | 0512h | 0514h | 0515h | 0516h | 0517h |
0518h | 0518h | 0519h | 051Ah | 051Bh | 051Ch | 051Dh | 051Eh | 051Fh |
0520h | 0520h | 0521h | 0522h | 0523h | 0524h | 0525h | 0526h | 0527h |
0528h | 0528h | 0529h | 052Ah | 052Bh | 052Ch | 052Dh | 052Eh | 052Fh |
0530h | 0530h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0538h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0540h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0548h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0550h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | 0557h |
0558h | 0558h | 0559h | 055Ah | 055Bh | 055Ch | 055Dh | 055Eh | 055Fh |
0560h | 0560h | 0531h | 0532h | 0533h | 0534h | 0535h | 0536h | 0537h |
0568h | 0538h | 0539h | 053Ah | 053Bh | 053Ch | 053Dh | 053Eh | 053Fh |
0570h | 0540h | 0541h | 0542h | 0543h | 0544h | 0545h | 0546h | 0547h |
0578h | 0548h | 0549h | 054Ah | 054Bh | 054Ch | 054Dh | 054Eh | 054Fh |
0580h | 0550h | 0551h | 0552h | 0553h | 0554h | 0555h | 0556h | FFFFh |
0588h | 17F6h | 2C63h | 1D7Eh | 1D7Fh | 1D80h | 1D81h | 1D82h | 1D83h |
0590h | 1D84h | 1D85h | 1D86h | 1D87h | 1D88h | 1D89h | 1D8Ah | 1D8Bh |
0598h | 1D8Ch | 1D8Dh | 1D8Eh | 1D8Fh | 1D90h | 1D91h | 1D92h | 1D93h |
05A0h | 1D94h | 1D95h | 1D96h | 1D97h | 1D98h | 1D99h | 1D9Ah | 1D9Bh |
05A8h | 1D9Ch | 1D9Dh | 1D9Eh | 1D9Fh | 1DA0h | 1DA1h | 1DA2h | 1DA3h |
05B0h | 1DA4h | 1DA5h | 1DA6h | 1DA7h | 1DA8h | 1DA9h | 1DAAh | 1DABh |
05B8h | 1DACh | 1DADh | 1DAEh | 1DAFh | 1DB0h | 1DB1h | 1DB2h | 1DB3h |
05C0h | 1DB4h | 1DB5h | 1DB6h | 1DB7h | 1DB8h | 1DB9h | 1DBAh | 1DBBh |
05C8h | 1DBCh | 1DBDh | 1DBEh | 1DBFh | 1DC0h | 1DC1h | 1DC2h | 1DC3h |
05D0h | 1DC4h | 1DC5h | 1DC6h | 1DC7h | 1DC8h | 1DC9h | 1DCAh | 1DCBh |
05D8h | 1DCCh | 1DCDh | 1DCEh | 1DCFh | 1DD0h | 1DD1h | 1DD2h | 1DD3h |
05E0h | 1DD4h | 1DD5h | 1DD6h | 1DD7h | 1DD8h | 1DD9h | 1DDAh | 1DDBh |
05E8h | 1DDCh | 1DDDh | 1DDEh | 1DDFh | 1DE0h | 1DE1h | 1DE2h | 1DE3h |
05F0h | 1DE4h | 1DE5h | 1DE6h | 1DE7h | 1DE8h | 1DE9h | 1DEAh | 1DEBh |
05F8h | 1DECh | 1DEDh | 1DEEh | 1DEFh | 1DF0h | 1DF1h | 1DF2h | 1DF3h |
0600h | 1DF4h | 1DF5h | 1DF6h | 1DF7h | 1DF8h | 1DF9h | 1DFAh | 1DFBh |
0608h | 1DFCh | 1DFDh | 1DFEh | 1DFFh | 1E00h | 1E00h | 1E02h | 1E02h |
0610h | 1E04h | 1E04h | 1E06h | 1E06h | 1E08h | 1E08h | 1E0Ah | 1E0Ah |
0618h | 1E0Ch | 1E0Ch | 1E0Eh | 1E0Eh | 1E10h | 1E10h | 1E12h | 1E12h |
0620h | 1E14h | 1E14h | 1E16h | 1E16h | 1E18h | 1E18h | 1E1Ah | 1E1Ah |
0628h | 1E1Ch | 1E1Ch | 1E1Eh | 1E1Eh | 1E20h | 1E20h | 1E22h | 1E22h |
0630h | 1E24h | 1E24h | 1E26h | 1E26h | 1E28h | 1E28h | 1E2Ah | 1E2Ah |
0638h | 1E2Ch | 1E2Ch | 1E2Eh | 1E2Eh | 1E30h | 1E30h | 1E32h | 1E32h |
0640h | 1E34h | 1E34h | 1E36h | 1E36h | 1E38h | 1E38h | 1E3Ah | 1E3Ah |
0648h | 1E3Ch | 1E3Ch | 1E3Eh | 1E3Eh | 1E40h | 1E40h | 1E42h | 1E42h |
0650h | 1E44h | 1E44h | 1E46h | 1E46h | 1E48h | 1E48h | 1E4Ah | 1E4Ah |
0658h | 1E4Ch | 1E4Ch | 1E4Eh | 1E4Eh | 1E50h | 1E50h | 1E52h | 1E52h |
0660h | 1E54h | 1E54h | 1E56h | 1E56h | 1E58h | 1E58h | 1E5Ah | 1E5Ah |
0668h | 1E5Ch | 1E5Ch | 1E5Eh | 1E5Eh | 1E60h | 1E60h | 1E62h | 1E62h |
0670h | 1E64h | 1E64h | 1E66h | 1E66h | 1E68h | 1E68h | 1E6Ah | 1E6Ah |
0678h | 1E6Ch | 1E6Ch | 1E6Eh | 1E6Eh | 1E70h | 1E70h | 1E72h | 1E72h |
0680h | 1E74h | 1E74h | 1E76h | 1E76h | 1E78h | 1E78h | 1E7Ah | 1E7Ah |
0688h | 1E7Ch | 1E7Ch | 1E7Eh | 1E7Eh | 1E80h | 1E80h | 1E82h | 1E82h |
0690h | 1E84h | 1E84h | 1E86h | 1E86h | 1E88h | 1E88h | 1E8Ah | 1E8Ah |
0698h | 1E8Ch | 1E8Ch | 1E8Eh | 1E8Eh | 1E90h | 1E90h | 1E92h | 1E92h |
06A0h | 1E94h | 1E94h | 1E96h | 1E97h | 1E98h | 1E99h | 1E9Ah | 1E9Bh |
06A8h | 1E9Ch | 1E9Dh | 1E9Eh | 1E9Fh | 1EA0h | 1EA0h | 1EA2h | 1EA2h |
06B0h | 1EA4h | 1EA4h | 1EA6h | 1EA6h | 1EA8h | 1EA8h | 1EAAh | 1EAAh |
06B8h | 1EACh | 1EACh | 1EAEh | 1EAEh | 1EB0h | 1EB0h | 1EB2h | 1EB2h |
06C0h | 1EB4h | 1EB4h | 1EB6h | 1EB6h | 1EB8h | 1EB8h | 1EBAh | 1EBAh |
06C8h | 1EBCh | 1EBCh | 1EBEh | 1EBEh | 1EC0h | 1EC0h | 1EC2h | 1EC2h |
06D0h | 1EC4h | 1EC4h | 1EC6h | 1EC6h | 1EC8h | 1EC8h | 1ECAh | 1ECAh |
06D8h | 1ECCh | 1ECCh | 1ECEh | 1ECEh | 1ED0h | 1ED0h | 1ED2h | 1ED2h |
06E0h | 1ED4h | 1ED4h | 1ED6h | 1ED6h | 1ED8h | 1ED8h | 1EDAh | 1EDAh |
06E8h | 1EDCh | 1EDCh | 1EDEh | 1EDEh | 1EE0h | 1EE0h | 1EE2h | 1EE2h |
06F0h | 1EE4h | 1EE4h | 1EE6h | 1EE6h | 1EE8h | 1EE8h | 1EEAh | 1EEAh |
06F8h | 1EECh | 1EECh | 1EEEh | 1EEEh | 1EF0h | 1EF0h | 1EF2h | 1EF2h |
0700h | 1EF4h | 1EF4h | 1EF6h | 1EF6h | 1EF8h | 1EF8h | 1EFAh | 1EFBh |
0708h | 1EFCh | 1EFDh | 1EFEh | 1EFFh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0710h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F08h | 1F09h | 1F0Ah | 1F0Bh |
0718h | 1F0Ch | 1F0Dh | 1F0Eh | 1F0Fh | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0720h | 1F1Ch | 1F1Dh | 1F16h | 1F17h | 1F18h | 1F19h | 1F1Ah | 1F1Bh |
0728h | 1F1Ch | 1F1Dh | 1F1Eh | 1F1Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0730h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F28h | 1F29h | 1F2Ah | 1F2Bh |
0738h | 1F2Ch | 1F2Dh | 1F2Eh | 1F2Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0740h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F38h | 1F39h | 1F3Ah | 1F3Bh |
0748h | 1F3Ch | 1F3Dh | 1F3Eh | 1F3Fh | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0750h | 1F4Ch | 1F4Dh | 1F46h | 1F47h | 1F48h | 1F49h | 1F4Ah | 1F4Bh |
0758h | 1F4Ch | 1F4Dh | 1F4Eh | 1F4Fh | 1F50h | 1F59h | 1F52h | 1F5Bh |
0760h | 1F54h | 1F5Dh | 1F56h | 1F5Fh | 1F58h | 1F59h | 1F5Ah | 1F5Bh |
0768h | 1F5Ch | 1F5Dh | 1F5Eh | 1F5Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0770h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1F68h | 1F69h | 1F6Ah | 1F6Bh |
0778h | 1F6Ch | 1F6Dh | 1F6Eh | 1F6Fh | 1FBAh | 1FBBh | 1FC8h | 1FC9h |
0780h | 1FCAh | 1FCBh | 1FDAh | 1FDBh | 1FF8h | 1FF9h | 1FEAh | 1FEBh |
0788h | 1FFAh | 1FFBh | 1F7Eh | 1F7Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0790h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F88h | 1F89h | 1F8Ah | 1F8Bh |
0798h | 1F8Ch | 1F8Dh | 1F8Eh | 1F8Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A0h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1F98h | 1F99h | 1F9Ah | 1F9Bh |
07A8h | 1F9Ch | 1F9Dh | 1F9Eh | 1F9Fh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B0h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FA8h | 1FA9h | 1FAAh | 1FABh |
07B8h | 1FACh | 1FADh | 1FAEh | 1FAFh | 1FB8h | 1FB9h | 1FB2h | 1FBCh |
07C0h | 1FB4h | 1FB5h | 1FB6h | 1FB7h | 1FB8h | 1FB9h | 1FBAh | 1FBBh |
07C8h | 1FBCh | 1FBDh | 1FBEh | 1FBFh | 1FC0h | 1FC1h | 1FC2h | 1FC3h |
07D0h | 1FC4h | 1FC5h | 1FC6h | 1FC7h | 1FC8h | 1FC9h | 1FCAh | 1FCBh |
07D8h | 1FC3h | 1FCDh | 1FCEh | 1FCFh | 1FD8h | 1FD9h | 1FD2h | 1FD3h |
07E0h | 1FD4h | 1FD5h | 1FD6h | 1FD7h | 1FD8h | 1FD9h | 1FDAh | 1FDBh |
07E8h | 1FDCh | 1FDDh | 1FDEh | 1FDFh | 1FE8h | 1FE9h | 1FE2h | 1FE3h |
07F0h | 1FE4h | 1FECh | 1FE6h | 1FE7h | 1FE8h | 1FE9h | 1FEAh | 1FEBh |
07F8h | 1FECh | 1FEDh | 1FEEh | 1FEFh | 1FF0h | 1FF1h | 1FF2h | 1FF3h |
0800h | 1FF4h | 1FF5h | 1FF6h | 1FF7h | 1FF8h | 1FF9h | 1FFAh | 1FFBh |
0808h | 1FF3h | 1FFDh | 1FFEh | 1FFFh | 2000h | 2001h | 2002h | 2003h |
0810h | 2004h | 2005h | 2006h | 2007h | 2008h | 2009h | 200Ah | 200Bh |
0818h | 200Ch | 200Dh | 200Eh | 200Fh | 2010h | 2011h | 2012h | 2013h |
0820h | 2014h | 2015h | 2016h | 2017h | 2018h | 2019h | 201Ah | 201Bh |
0828h | 201Ch | 201Dh | 201Eh | 201Fh | 2020h | 2021h | 2022h | 2023h |
0830h | 2024h | 2025h | 2026h | 2027h | 2028h | 2029h | 202Ah | 202Bh |
0838h | 202Ch | 202Dh | 202Eh | 202Fh | 2030h | 2031h | 2032h | 2033h |
0840h | 2034h | 2035h | 2036h | 2037h | 2038h | 2039h | 203Ah | 203Bh |
0848h | 203Ch | 203Dh | 203Eh | 203Fh | 2040h | 2041h | 2042h | 2043h |
0850h | 2044h | 2045h | 2046h | 2047h | 2048h | 2049h | 204Ah | 204Bh |
0858h | 204Ch | 204Dh | 204Eh | 204Fh | 2050h | 2051h | 2052h | 2053h |
0860h | 2054h | 2055h | 2056h | 2057h | 2058h | 2059h | 205Ah | 205Bh |
0868h | 205Ch | 205Dh | 205Eh | 205Fh | 2060h | 2061h | 2062h | 2063h |
0870h | 2064h | 2065h | 2066h | 2067h | 2068h | 2069h | 206Ah | 206Bh |
0878h | 206Ch | 206Dh | 206Eh | 206Fh | 2070h | 2071h | 2072h | 2073h |
0880h | 2074h | 2075h | 2076h | 2077h | 2078h | 2079h | 207Ah | 207Bh |
0888h | 207Ch | 207Dh | 207Eh | 207Fh | 2080h | 2081h | 2082h | 2083h |
0890h | 2084h | 2085h | 2086h | 2087h | 2088h | 2089h | 208Ah | 208Bh |
0898h | 208Ch | 208Dh | 208Eh | 208Fh | 2090h | 2091h | 2092h | 2093h |
08A0h | 2094h | 2095h | 2096h | 2097h | 2098h | 2099h | 209Ah | 209Bh |
08A8h | 209Ch | 209Dh | 209Eh | 209Fh | 20A0h | 20A1h | 20A2h | 20A3h |
08B0h | 20A4h | 20A5h | 20A6h | 20A7h | 20A8h | 20A9h | 20AAh | 20ABh |
08B8h | 20ACh | 20ADh | 20AEh | 20AFh | 20B0h | 20B1h | 20B2h | 20B3h |
08C0h | 20B4h | 20B5h | 20B6h | 20B7h | 20B8h | 20B9h | 20BAh | 20BBh |
08C8h | 20BCh | 20BDh | 20BEh | 20BFh | 20C0h | 20C1h | 20C2h | 20C3h |
08D0h | 20C4h | 20C5h | 20C6h | 20C7h | 20C8h | 20C9h | 20CAh | 20CBh |
08D8h | 20CCh | 20CDh | 20CEh | 20CFh | 20D0h | 20D1h | 20D2h | 20D3h |
08E0h | 20D4h | 20D5h | 20D6h | 20D7h | 20D8h | 20D9h | 20DAh | 20DBh |
08E8h | 20DCh | 20DDh | 20DEh | 20DFh | 20E0h | 20E1h | 20E2h | 20E3h |
08F0h | 20E4h | 20E5h | 20E6h | 20E7h | 20E8h | 20E9h | 20EAh | 20EBh |
08F8h | 20ECh | 20EDh | 20EEh | 20EFh | 20F0h | 20F1h | 20F2h | 20F3h |
0900h | 20F4h | 20F5h | 20F6h | 20F7h | 20F8h | 20F9h | 20FAh | 20FBh |
0908h | 20FCh | 20FDh | 20FEh | 20FFh | 2100h | 2101h | 2102h | 2103h |
0910h | 2104h | 2105h | 2106h | 2107h | 2108h | 2109h | 210Ah | 210Bh |
0918h | 210Ch | 210Dh | 210Eh | 210Fh | 2110h | 2111h | 2112h | 2113h |
0920h | 2114h | 2115h | 2116h | 2117h | 2118h | 2119h | 211Ah | 211Bh |
0928h | 211Ch | 211Dh | 211Eh | 211Fh | 2120h | 2121h | 2122h | 2123h |
0930h | 2124h | 2125h | 2126h | 2127h | 2128h | 2129h | 212Ah | 212Bh |
0938h | 212Ch | 212Dh | 212Eh | 212Fh | 2130h | 2131h | 2132h | 2133h |
0940h | 2134h | 2135h | 2136h | 2137h | 2138h | 2139h | 213Ah | 213Bh |
0948h | 213Ch | 213Dh | 213Eh | 213Fh | 2140h | 2141h | 2142h | 2143h |
0950h | 2144h | 2145h | 2146h | 2147h | 2148h | 2149h | 214Ah | 214Bh |
0958h | 214Ch | 214Dh | 2132h | 214Fh | 2150h | 2151h | 2152h | 2153h |
0960h | 2154h | 2155h | 2156h | 2157h | 2158h | 2159h | 215Ah | 215Bh |
0968h | 215Ch | 215Dh | 215Eh | 215Fh | 2160h | 2161h | 2162h | 2163h |
0970h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0978h | 216Ch | 216Dh | 216Eh | 216Fh | 2160h | 2161h | 2162h | 2163h |
0980h | 2164h | 2165h | 2166h | 2167h | 2168h | 2169h | 216Ah | 216Bh |
0988h | 216Ch | 216Dh | 216Eh | 216Fh | 2180h | 2181h | 2182h | 2183h |
0990h | 2183h | FFFFh | 034Bh | 24B6h | 24B7h | 24B8h | 24B9h | 24BAh |
0998h | 24BBh | 24BCh | 24BDh | 24BEh | 24BFh | 24C0h | 24C1h | 24C2h |
09A0h | 24C3h | 24C4h | 24C5h | 24C6h | 24C7h | 24C8h | 24C9h | 24CAh |
09A8h | 24CBh | 24CCh | 24CDh | 24CEh | 24CFh | FFFFh | 0746h | 2C00h |
09B0h | 2C01h | 2C02h | 2C03h | 2C04h | 2C05h | 2C06h | 2C07h | 2C08h |
09B8h | 2C09h | 2C0Ah | 2C0Bh | 2C0Ch | 2C0Dh | 2C0Eh | 2C0Fh | 2C10h |
09C0h | 2C11h | 2C12h | 2C13h | 2C14h | 2C15h | 2C16h | 2C17h | 2C18h |
09C8h | 2C19h | 2C1Ah | 2C1Bh | 2C1Ch | 2C1Dh | 2C1Eh | 2C1Fh | 2C20h |
09D0h | 2C21h | 2C22h | 2C23h | 2C24h | 2C25h | 2C26h | 2C27h | 2C28h |
09D8h | 2C29h | 2C2Ah | 2C2Bh | 2C2Ch | 2C2Dh | 2C2Eh | 2C5Fh | 2C60h |
09E0h | 2C60h | 2C62h | 2C63h | 2C64h | 2C65h | 2C66h | 2C67h | 2C67h |
09E8h | 2C69h | 2C69h | 2C6Bh | 2C6Bh | 2C6Dh | 2C6Eh | 2C6Fh | 2C70h |
09F0h | 2C71h | 2C72h | 2C73h | 2C74h | 2C75h | 2C75h | 2C77h | 2C78h |
09F8h | 2C79h | 2C7Ah | 2C7Bh | 2C7Ch | 2C7Dh | 2C7Eh | 2C7Fh | 2C80h |
0A00h | 2C80h | 2C82h | 2C82h | 2C84h | 2C84h | 2C86h | 2C86h | 2C88h |
0A08h | 2C88h | 2C8Ah | 2C8Ah | 2C8Ch | 2C8Ch | 2C8Eh | 2C8Eh | 2C90h |
0A10h | 2C90h | 2C92h | 2C92h | 2C94h | 2C94h | 2C96h | 2C96h | 2C98h |
0A18h | 2C98h | 2C9Ah | 2C9Ah | 2C9Ch | 2C9Ch | 2C9Eh | 2C9Eh | 2CA0h |
0A20h | 2CA0h | 2CA2h | 2CA2h | 2CA4h | 2CA4h | 2CA6h | 2CA6h | 2CA8h |
0A28h | 2CA8h | 2CAAh | 2CAAh | 2CACh | 2CACh | 2CAEh | 2CAEh | 2CB0h |
0A30h | 2CB0h | 2CB2h | 2CB2h | 2CB4h | 2CB4h | 2CB6h | 2CB6h | 2CB8h |
0A38h | 2CB8h | 2CBAh | 2CBAh | 2CBCh | 2CBCh | 2CBEh | 2CBEh | 2CC0h |
0A40h | 2CC0h | 2CC2h | 2CC2h | 2CC4h | 2CC4h | 2CC6h | 2CC6h | 2CC8h |
0A48h | 2CC8h | 2CCAh | 2CCAh | 2CCCh | 2CCCh | 2CCEh | 2CCEh | 2CD0h |
0A50h | 2CD0h | 2CD2h | 2CD2h | 2CD4h | 2CD4h | 2CD6h | 2CD6h | 2CD8h |
0A58h | 2CD8h | 2CDAh | 2CDAh | 2CDCh | 2CDCh | 2CDEh | 2CDEh | 2CE0h |
0A60h | 2CE0h | 2CE2h | 2CE2h | 2CE4h | 2CE5h | 2CE6h | 2CE7h | 2CE8h |
0A68h | 2CE9h | 2CEAh | 2CEBh | 2CECh | 2CEDh | 2CEEh | 2CEFh | 2CF0h |
0A70h | 2CF1h | 2CF2h | 2CF3h | 2CF4h | 2CF5h | 2CF6h | 2CF7h | 2CF8h |
0A78h | 2CF9h | 2CFAh | 2CFBh | 2CFCh | 2CFDh | 2CFEh | 2CFFh | 10A0h |
0A80h | 10A1h | 10A2h | 10A3h | 10A4h | 10A5h | 10A6h | 10A7h | 10A8h |
0A88h | 10A9h | 10AAh | 10ABh | 10ACh | 10ADh | 10AEh | 10AFh | 10B0h |
0A90h | 10B1h | 10B2h | 10B3h | 10B4h | 10B5h | 10B6h | 10B7h | 10B8h |
0A98h | 10B9h | 10BAh | 10BBh | 10BCh | 10BDh | 10BEh | 10BFh | 10C0h |
0AA0h | 10C1h | 10C2h | 10C3h | 10C4h | 10C5h | FFFFh | D21Bh | FF21h |
0AA8h | FF22h | FF23h | FF24h | FF25h | FF26h | FF27h | FF28h | FF29h |
0AB0h | FF2Ah | FF2Bh | FF2Ch | FF2Dh | FF2Eh | FF2Fh | FF30h | FF31h |
0AB8h | FF32h | FF33h | FF34h | FF35h | FF36h | FF37h | FF38h | FF39h |
0AC0h | FF3Ah | FF5Bh | FF5Ch | FF5Dh | FF5Eh | FF5Fh | FF60h | FF61h |
0AC8h | FF62h | FF63h | FF64h | FF65h | FF66h | FF67h | FF68h | FF69h |
0AD0h | FF6Ah | FF6Bh | FF6Ch | FF6Dh | FF6Eh | FF6Fh | FF70h | FF71h |
0AD8h | FF72h | FF73h | FF74h | FF75h | FF76h | FF77h | FF78h | FF79h |
0AE0h | FF7Ah | FF7Bh | FF7Ch | FF7Dh | FF7Eh | FF7Fh | FF80h | FF81h |
0AE8h | FF82h | FF83h | FF84h | FF85h | FF86h | FF87h | FF88h | FF89h |
0AF0h | FF8Ah | FF8Bh | FF8Ch | FF8Dh | FF8Eh | FF8Fh | FF90h | FF91h |
0AF8h | FF92h | FF93h | FF94h | FF95h | FF96h | FF97h | FF98h | FF99h |
0B00h | FF9Ah | FF9Bh | FF9Ch | FF9Dh | FF9Eh | FF9Fh | FFA0h | FFA1h |
0B08h | FFA2h | FFA3h | FFA4h | FFA5h | FFA6h | FFA7h | FFA8h | FFA9h |
0B10h | FFAAh | FFABh | FFACh | FFADh | FFAEh | FFAFh | FFB0h | FFB1h |
0B18h | FFB2h | FFB3h | FFB4h | FFB5h | FFB6h | FFB7h | FFB8h | FFB9h |
0B20h | FFBAh | FFBBh | FFBCh | FFBDh | FFBEh | FFBFh | FFC0h | FFC1h |
0B28h | FFC2h | FFC3h | FFC4h | FFC5h | FFC6h | FFC7h | FFC8h | FFC9h |
0B30h | FFCAh | FFCBh | FFCCh | FFCDh | FFCEh | FFCFh | FFD0h | FFD1h |
0B38h | FFD2h | FFD3h | FFD4h | FFD5h | FFD6h | FFD7h | FFD8h | FFD9h |
0B40h | FFDAh | FFDBh | FFDCh | FFDDh | FFDEh | FFDFh | FFE0h | FFE1h |
0B48h | FFE2h | FFE3h | FFE4h | FFE5h | FFE6h | FFE7h | FFE8h | FFE9h |
0B50h | FFEAh | FFEBh | FFECh | FFEDh | FFEEh | FFEFh | FFF0h | FFF1h |
0B58h | FFF2h | FFF3h | FFF4h | FFF5h | FFF6h | FFF7h | FFF8h | FFF9h |
0B60h | FFFAh | FFFBh | FFFCh | FFFDh | FFFEh | FFFFh |
7.3 ボリュームラベルディレクトリエントリ
ボリューム ラベルは、エンド ユーザーがストレージ ボリュームを区別できるようにする Unicode 文字列です。 exFAT ファイル システムでは、ボリューム ラベルはルート ディレクトリに重要なプライマリ ディレクトリ エントリとして存在します ( 表 26 を参照)。 ボリューム ラベル ディレクトリ エントリの有効な数は、0 から 1 の範囲です。
表 26 ボリューム ラベル ディレクトリエントリ構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.3.1 ではその内容を定義します。 |
CharacterCount | 1 | 1 | このフィールドは必須であり、 セクション 7.3.2 ではその内容を定義します。 |
VolumeLabel | 2 | 22 | このフィールドは必須であり、 セクション 7.3.3 ではその内容を定義します。 |
予約済み | 24 | 8 | このフィールドは必須であり、その内容は予約されています。 |
7.3.1 EntryType フィールド
EntryType フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1 を参照)。
7.3.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.1 を参照)。
ボリューム ラベル ディレクトリ エントリの場合、このフィールドの有効な値は 3 です。
7.3.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.2 を参照)。
ボリューム ラベル ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.3.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.3 を参照)。
7.3.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.4 を参照)。
7.3.2 CharacterCount フィールド
CharacterCount フィールドには、VolumeLabel フィールドに含まれる Unicode 文字列の長さが含まれている必要があります。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 0。Unicode 文字列の長さが 0 文字であることを意味します (ボリューム ラベルなしに相当します)。
Unicode 文字列の長さが 11 文字であることを意味する最大 11 文字
7.3.3 VolumeLabel フィールド
VolumeLabel フィールドには、ボリュームのわかりやすい名前である Unicode 文字列が含まれている必要があります。 VolumeLabel フィールドには、ファイル名ディレクトリ エントリの FileName フィールドと同じ無効な文字セットがあります ( セクション 7.7.3 を参照)。
7.4 ファイルディレクトリエントリ
ファイル ディレクトリ エントリは、ファイルとディレクトリを記述します。 これらは重要なプライマリ ディレクトリ エントリであり、任意のディレクトリに 0 個以上のファイル ディレクトリ エントリを含められることがあります ( 表 27 を参照)。 File directory エントリを有効にするには、1 つの Stream Extension ディレクトリ エントリと少なくとも 1 つの File Name ディレクトリ エントリが、File directory エントリの直後に存在する必要があります (それぞれ セクション 7.6 と セクション 7.7 を参照)。
表 27 ファイル ディレクトリエントリ
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.4.1 ではその内容を定義します。 |
SecondaryCount | 1 | 1 | このフィールドは必須であり、 セクション 7.4.2 ではその内容を定義します。 |
SetChecksum | 2 | 2 | このフィールドは必須であり、 セクション 7.4.3 ではその内容を定義します。 |
FileAttributes | 4 | 2 | このフィールドは必須であり、 セクション 7.4.4 ではその内容を定義します。 |
Reserved1 | 6 | 2 | このフィールドは必須であり、その内容は予約されています。 |
CreateTimestamp | 8 | 4 | このフィールドは必須であり、 セクション 7.4.5 ではその内容を定義します。 |
LastModifiedTimestamp | 12 | 4 | このフィールドは必須であり、 セクション 7.4.6 ではその内容を定義します。 |
LastAccessedTimestamp | 16 | 4 | このフィールドは必須であり、 セクション 7.4.7 ではその内容を定義します。 |
Create10msIncrement | 20 | 1 | このフィールドは必須であり、 セクション 7.4.5 ではその内容を定義します。 |
LastModified10msIncrement | 21 | 1 | このフィールドは必須であり、 セクション 7.4.6 ではその内容を定義します。 |
CreateUtcOffset | 22 | 1 | このフィールドは必須であり、 セクション 7.4.5 ではその内容を定義します。 |
LastModifiedUtcOffset | 23 | 1 | このフィールドは必須であり、 セクション 7.4.6 ではその内容が定義されています。 |
LastAccessedUtcOffset | 24 | 1 | このフィールドは必須であり、 セクション 7.4.7 ではその内容が定義されています。 |
Reserved2 | 25 | 7 | このフィールドは必須であり、その内容は予約されています。 |
7.4.1 EntryType フィールド
EntryType フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.1 を参照)。
7.4.1.1 TypeCode フィールド
TypeCode フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.1.1 を参照)。
ファイル ディレクトリ エントリの場合、このフィールドの有効な値は 5 です。
7.4.1.2 TypeImportance フィールド
TypeImportance フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.1.2 を参照)。
ファイル ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.4.1.3 TypeCategory フィールド
TypeCategory フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.1.3 を参照)。
7.4.1.4 InUse フィールド
InUse フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.1.4 を参照)。
7.4.2 SecondaryCount フィールド
SecondaryCount フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.3.2 を参照)。
7.4.3 SetChecksum フィールド
SetChecksum フィールドは、Generic Primary DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.3 を参照)。
7.4.4 FileAttributes フィールド
FileAttributes フィールドにはフラグが含まれています ( 表 28 を参照)。
表 28 FileAttributes フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
ReadOnly | 0 | 1 | このフィールドは必須であり、MS-DOS 定義に準拠しています。 |
[非表示] | 1 | 1 | このフィールドは必須であり、MS-DOS 定義に準拠しています。 |
システム | 2 | 1 | このフィールドは必須であり、MS-DOS 定義に準拠しています。 |
Reserved1 | 3 | 1 | このフィールドは必須であり、その内容は予約されています。 |
ディレクトリ | 4 | 1 | このフィールドは必須であり、MS-DOS 定義に準拠しています。 |
アーカイブ | 5 | 1 | このフィールドは必須であり、MS-DOS 定義に準拠しています。 |
Reserved2 | 6 | 10 | このフィールドは必須であり、その内容は予約されています。 |
7.4.5 CreateTimestamp、Create10msIncrement、CreateUtcOffset の各フィールド
CreateTimestamp フィールドと CreateTime10msIncrement フィールドを組み合わせて使用すると、指定されたファイル/ディレクトリが作成されたローカルの日付と時刻が記述されます。 CreateUtcOffset フィールドには、UTC からのローカルの日付と時刻のオフセットが記述されています。 実装では、指定されたディレクトリ エントリ セットの作成時にこれらのフィールドを設定する必要があります。
これらのフィールドは、Timestamp、10msIncrement、および UtcOffset フィールドの定義に準拠している必要があります ( セクション 7.4.8、 セクション 7.4.9、セクション 7.4.10 を参照)。
7.4.6 LastModifiedTimestamp、LastModified10msIncrement、および LastModifiedUtcOffset フィールド
組み合わせて、LastModifiedTimestamp フィールドと LastModifiedTime10msIncrement フィールドは、指定された Stream Extension ディレクトリ エントリに関連付けられているクラスターの内容が最後に変更されたローカルの日付と時刻を記述する必要があります。 LastModifiedUtcOffset フィールドは、UTC からのローカル日時のオフセットを表します。 実装では、次のフィールドを更新する必要があります。
指定された Stream Extension ディレクトリ エントリに関連付けられているクラスターの内容を変更した後 (ValidDataLength フィールドで説明されているポイントを超えて存在するコンテンツを除く)
ValidDataLength フィールドまたは DataLength フィールドの値を変更した場合
これらのフィールドは、Timestamp、10msIncrement、および UtcOffset フィールドの定義に準拠している必要があります ( セクション 7.4.8、 セクション 7.4.9、セクション 7.4.10 を参照)。
7.4.7 LastAccessedTimestamp フィールドと LastAccessedUtcOffset フィールド
LastAccessedTimestamp フィールドには、指定された Stream Extension ディレクトリ エントリに関連付けられているクラスターの内容が最後にアクセスされたローカルの日付と時刻を記述する必要があります。 LastAccessedUtcOffset フィールドには、UTC からのローカル日時のオフセットが記述されています。 実装では、次のフィールドを更新する必要があります。
指定された Stream Extension ディレクトリ エントリに関連付けられているクラスターの内容を変更した後 (ValidDataLength を超えて存在するコンテンツを除く)
ValidDataLength フィールドまたは DataLength フィールドの値を変更した場合
実装では、指定された Stream Extension ディレクトリ エントリに関連付けられているクラスターの内容を読み取った後、これらのフィールドを更新する必要があります。
これらのフィールドは、Timestamp フィールドと UtcOffset フィールドの定義に準拠している必要があります (セクション 7.4.8 および セクション 7.4.10 を参照)。
7.4.8 タイムスタンプ フィールド
タイムスタンプ フィールドは、ローカルの日付と時刻の両方を 2 秒の解像度まで記述します ( 表 29 を参照)。
表 29 タイムスタンプ フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
DoubleSeconds | 0 | 5 | このフィールドは必須であり、 セクション 7.4.8.1 ではその内容が定義されています。 |
分 | 5 | 6 | このフィールドは必須であり、 セクション 7.4.8.2 ではその内容が定義されています。 |
時間 | 11 | 5 | このフィールドは必須であり、 セクション 7.4.8.3 ではその内容が定義されています。 |
日間 | 16 | 5 | このフィールドは必須であり、 セクション 7.4.8.4 ではその内容が定義されています。 |
Month | 21 | 4 | このフィールドは必須であり、 セクション 7.4.8.5 ではその内容が定義されています。 |
Year | 25 | 7 | このフィールドは必須であり、 セクション 7.4.8.6 ではその内容が定義されています。 |
7.4.8.1 DoubleSeconds フィールド
DoubleSeconds フィールドは、Timestamp フィールドの秒部分を 2 秒の倍数で表す必要があります。
このフィールドの有効な値の範囲は次のとおりです。
0 秒を表す 0
58 秒を表す 29
7.4.8.2 分フィールド
[分] フィールドには、Timestamp フィールドの分部分を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
0(0 分を表す)
59(59 分を表す)
7.4.8.3 時間フィールド
[時間] フィールドには、Timestamp フィールドの時間部分を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
0。00:00 時間を表します
23。23:00 時間を表します
7.4.8.4 日フィールド
[日] フィールドには、[タイムスタンプ] フィールドの日付部分を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
1。これは、指定された月の最初の日です
指定された月の最終日 (指定された月は有効な日数を定義します)
7.4.8.5 Month フィールド
[月] フィールドには、Timestamp フィールドの月部分を記述する必要があります。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 1。1 月を表します
最大 12 個(12 月を表す)
7.4.8.6 年フィールド
[年] フィールドには、1980 年を基準にして Timestamp フィールドの年部分を記述する必要があります。 このフィールドは、値が 0 の 1980 年と、値が 127 の年 2107 を表します。
このフィールドに指定できる値はすべて有効です。
7.4.9 10msIncrement フィールド
10msIncrement フィールドは、対応する Timestamp フィールドに 10 ミリ秒の倍数で追加の時間解決を提供する必要があります。
これらのフィールドの有効な値の範囲は次のとおりです。
少なくとも 0。0 ミリ秒を表します
1990 ミリ秒を表す最大 199
7.4.10 UtcOffset フィールド
UtcOffset フィールド ( 表 30 を参照) では、対応する Timestamp フィールドと 10msIncrement フィールドが記述するローカル日付と時刻への UTC からのオフセットを記述する必要があります。 UTC からローカルの日付と時刻へのオフセットには、タイム ゾーンの影響や、夏時間や地域の夏時間の変更など、その他の日付と時刻の調整が含まれます。
表 30 UtcOffset フィールド構造
フィールド名 | Offset (ビット) |
[サイズ] (ビット) |
コメント |
---|---|---|---|
OffsetFromUtc | 0 | 7 | このフィールドは必須であり、 セクション 7.4.10.1ではその内容を定義します。 |
OffsetValid | 7 | 1 | このフィールドは必須であり、 セクション 7.4.10.2 ではその内容が定義されています。 |
7.4.10.1 OffsetFromUtc フィールド
OffsetFromUtc フィールドには、関連する Timestamp フィールドと 10msIncrement フィールドに含まれるローカル日時の UTC からのオフセットを記述する必要があります。 このフィールドは、UTC からのオフセットを 15 分間隔で表します (表 31 を参照)。
表 31 OffsetFromUtc フィールドの値の意味
Value | 符号付き 10 進数の等価 | 説明 |
---|---|---|
3Fh | 63 | ローカルの日付と時刻は UTC + 15:45 です |
3Eh | 62 | ローカルの日付と時刻は UTC + 15:30 です |
. . . |
. . . |
. . . |
01h | 1 | ローカルの日付と時刻は UTC + 00:15 です |
00h | 0 | ローカルの日付と時刻は UTC です |
7Fh | -1 | ローカルの日付と時刻は UTC – 00:15 です |
. . . |
. . . |
. . . |
41h | -63 | ローカルの日付と時刻は UTC – 15:45 です |
40h | -64 | ローカルの日付と時刻は UTC – 16:00 です |
上の表に示すように、このフィールドに指定できる値はすべて有効です。 ただし、実装では、次の場合にのみこのフィールドの値 00h を記録する必要があります。
ローカルの日付と時刻は実際には UTC と同じです。この場合、OffsetValid フィールドの値は 1 になります
ローカルの日付と時刻が不明です。この場合、OffsetValid フィールドの値は 1 で、実装では UTC をローカルの日付と時刻と見なす必要があります
UTC が不明です。この場合、OffsetValid フィールドの値は 0 になります
UTC からのローカルの日付と時刻のオフセットが 15 分間隔の倍数でない場合、実装は OffsetFromUtc フィールドに 00h を記録し、UTC をローカルの日付と時刻と見なします。
7.4.10.2 OffsetValid フィールド
OffsetValid フィールドは、OffsetFromUtc フィールドの内容が有効かどうかを次のように記述する必要があります。
0。OffsetFromUtc フィールドの内容が無効であることを意味します
と は 00h でなければなりません。
1。 OffsetFromUtc フィールドの内容が有効であることを意味します。
実装では、OffsetFromUtc フィールドの値を計算するために UTC を使用できない場合にのみ、このフィールドを値 0 に設定する必要があります。 このフィールドに値 0 が含まれている場合、実装は Timestamp フィールドと 10msIncrement フィールドを、現在のローカル日時と同じ UTC オフセットを持つものとして扱う必要があります。
7.5 ボリューム GUID ディレクトリ エントリ
ボリューム GUID ディレクトリ エントリには、実装でボリュームを一意かつプログラムで区別できるようにする GUID が含まれています。 ボリューム GUID は、ルート ディレクトリに無害なプライマリ ディレクトリ エントリとして存在します ( 表 32 を参照)。 ボリューム GUID ディレクトリ エントリの有効な数は、0 から 1 の範囲です。
表 32 ボリューム GUID ディレクトリEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.5.1 ではその内容を定義します。 |
SecondaryCount | 1 | 1 | このフィールドは必須であり、 セクション 7.5.2 ではその内容が定義されています。 |
SetChecksum | 2 | 2 | このフィールドは必須であり、 セクション 7.5.3 ではその内容を定義します。 |
GeneralPrimaryFlags | 4 | 2 | このフィールドは必須であり、 セクション 7.5.4 ではその内容が定義されています。 |
VolumeGuid | 6 | 16 | このフィールドは必須であり、 セクション 7.5.5 では その内容を定義します。 |
予約済み | 22 | 10 | このフィールドは必須であり、その内容は予約されています。 |
7.5.1 EntryType フィールド
EntryType フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1 を参照)。
7.5.1.1 TypeCode フィールド
TypeCode フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.1 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.2 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.5.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.1.3 を参照)。
7.5.1.4 InUse フィールド
InUse フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠している必要があります ( セクション 6.3.1.4 を参照)。
7.5.2 SecondaryCount フィールド
SecondaryCount フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.2 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.3 SetChecksum フィールド
SetChecksum フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.3 を参照)。
7.5.4 GeneralPrimaryFlags フィールド
GeneralPrimaryFlags フィールドは、汎用プライマリ DirectoryEntry テンプレート ( セクション 6.3.4 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.5.4.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用プライマリ ディレクトリEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.3.4.1 を参照)。
ボリューム GUID ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.5.4.2 NoFatChain フィールド
NoFatChain フィールドは、汎用プライマリ DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.3.4.2 を参照)。
7.5.5 VolumeGuid フィールド
VolumeGuid フィールドには、指定されたボリュームを一意に識別する GUID が含まれている必要があります。
null GUID {00000000-0000-0000-0000-000000000000}() を除き、このフィールドに指定できる値はすべて有効です。
7.6 Stream Extension Directory Entry
Stream Extension ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの重要なセカンダリ ディレクトリ エントリです ( 表 33 を参照)。 ファイル ディレクトリ エントリ セット内の Stream Extension ディレクトリ エントリの有効な数は 1 です。 さらに、このディレクトリ エントリは、ファイル ディレクトリ エントリの直後にある場合にのみ有効です。
表 33 Stream Extension DirectoryEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.6.1 ではその内容を定義します。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.6.2 ではその内容が定義されています。 |
Reserved1 | 2 | 1 | このフィールドは必須であり、その内容は予約されています。 |
NameLength | 3 | 1 | このフィールドは必須であり、 セクション 7.6.3 ではその内容を定義します。 |
NameHash | 4 | 2 | このフィールドは必須であり、 セクション 7.6.4 ではその内容を定義します。 |
Reserved2 | 6 | 2 | このフィールドは必須であり、その内容は予約されています。 |
ValidDataLength | 8 | 8 | このフィールドは必須であり、 セクション 7.6.5 ではその内容を定義します。 |
予約済み 3 | 16 | 4 | このフィールドは必須であり、その内容は予約されています。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 7.6.6 ではその内容を定義します。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 7.6.7 ではその内容を定義します。 |
7.6.1 EntryType フィールド
EntryType フィールドは、汎用 Secondary DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.6.1.1 TypeCode フィールド
TypeCode フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.6.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.6.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ ディレクトリEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.6.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1.4 を参照)。
7.6.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、Generic Secondary DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.6.2.1 割り当て可能フィールド
AllocationPossible フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供されている定義に準拠する必要があります ( セクション 6.4.2.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.6.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用 Secondary DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.2.2 を参照)。
7.6.3 NameLength フィールド
NameLength フィールドには、後続の File Name ディレクトリ エントリ ( セクション 7.7 を参照) にまとめて含まれる Unicode 文字列の長さが含まれている必要があります。
このフィールドの有効な値の範囲は次のとおりです。
少なくとも 1。可能な限り短いファイル名です
最大 255 個(可能な限り長いファイル名)
NameLength フィールドの値は、ファイル名ディレクトリエントリの数にも影響します ( セクション 7.7 を参照)。
7.6.4 NameHash フィールド
NameHash フィールドには、大文字と小文字を区別したファイル名の 2 バイト ハッシュ ( 図 4 を参照) が含まれている必要があります。 これにより、名前でファイルを検索するときに、実装で簡単な比較を実行できます。 重要なのは、NameHash によって不一致が確実に検証される点です。 実装では、大文字と小文字が区別されたファイル名を比較して、すべての NameHash が一致するかどうかを確認する必要があります。
図 4 NameHash の計算
UInt16 NameHash
(
WCHAR * FileName, // points to an in-memory copy of the up-cased file name
UCHAR NameLength
)
{
UCHAR * Buffer = (UCHAR *)FileName;
UInt16 NumberOfBytes = (UInt16)NameLength * 2;
UInt16 Hash = 0;
UInt16 Index;
for (Index = 0; Index < NumberOfBytes; Index++)
{
Hash = ((Hash&1) ? 0x8000 : 0) + (Hash>>1) + (UInt16)Buffer[Index];
}
return Hash;
}
7.6.5 ValidDataLength フィールド
ValidDataLength フィールドには、ユーザー データが書き込まれたデータ ストリームにどれだけの距離が書き込まれているかを記述する必要があります。 実装では、データ ストリームにデータをさらに書き込むにつれて、このフィールドを更新する必要があります。 ストレージ メディアでは、有効なデータ長とデータ ストリームのデータ長の間のデータは未定義です。 実装では、有効なデータ長を超える読み取り操作に対してゼロを返す必要があります。
対応する File ディレクトリ エントリでディレクトリが記述されている場合、このフィールドの有効な値は DataLength フィールドの値と等しくなります。 それ以外の場合、このフィールドの有効な値の範囲は次のようになります。
少なくとも 0。つまり、ユーザー データがデータ ストリームに書き込まれない
最大で DataLength。つまり、ユーザー データはデータ ストリームの長さ全体に書き込まれています
7.6.6 FirstCluster フィールド
FirstCluster フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.3 を参照)。
このフィールドには、ユーザー データをホストするデータ ストリームの最初のクラスターのインデックスが含まれている必要があります。
7.6.7 DataLength フィールド
DataLength フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.4 を参照)。
対応する File ディレクトリ エントリでディレクトリが記述されている場合、このフィールドの有効な値は、関連付けられた割り当てのサイズ全体 (バイト単位) です。これは 0 である可能性があります。 さらに、ディレクトリの場合、このフィールドの最大値は 256 MB です。
7.7 ファイル名ディレクトリエントリ
ファイル名ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの重要なセカンダリ ディレクトリ エントリです ( 表 34 を参照)。 ファイル ディレクトリ エントリ セット内のファイル名ディレクトリ エントリの有効な数は NameLength/ 15 で、最も近い整数に切り上げられます。 さらに、ファイル名ディレクトリ エントリは、連続する系列として Stream Extension ディレクトリ エントリの直後にある場合にのみ有効です。 [ファイル名] ディレクトリ エントリが結合され、ファイル ディレクトリ エントリ セットのファイル名が形成されます。
指定されたディレクトリ エントリのすべての子には、一意のファイル名ディレクトリ エントリ セットが含まれます。 つまり、1 つのディレクトリ内で大文字と小文字を区別した後に重複するファイル名やディレクトリ名を指定することはできません。
表 34 ファイル名ディレクトリEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.7.1 ではその内容を定義します。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.7.2 ではその内容が定義されています。 |
FileName | 2 | 30 | このフィールドは必須であり、 セクション 7.7.3 ではその内容を定義します。 |
7.7.1 EntryType フィールド
EntryType フィールドは、汎用 Secondary DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1 を参照)。
7.7.1.1 TypeCode フィールド
TypeCode フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.1 を参照)。
[ファイル名] ディレクトリ エントリの場合、このフィールドの有効な値は 1 です。
7.7.1.2 TypeImportance フィールド
TypeImportance フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1.2 を参照)。
[ファイル名] ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.7.1.3 TypeCategory フィールド
TypeCategory フィールドは、汎用セカンダリ ディレクトリEntry テンプレートで提供されている定義に準拠する必要があります ( セクション 6.4.1.3 を参照)。
7.7.1.4 InUse フィールド
InUse フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.1.4 を参照)。
7.7.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、Generic Secondary DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.7.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、汎用セカンダリ ディレクトリエントリ テンプレートで提供されている定義に準拠する必要があります ( セクション 6.4.2.1 を参照)。
Stream Extension ディレクトリ エントリの場合、このフィールドの有効な値は 0 です。
7.7.2.2 NoFatChain フィールド
NoFatChain フィールドは、汎用 Secondary DirectoryEntry テンプレートで提供される定義に準拠する必要があります ( セクション 6.4.2.2 を参照)。
7.7.3 FileName フィールド
FileName フィールドには、ファイル名の一部である Unicode 文字列が含まれている必要があります。 File Directory エントリ セットに File Name ディレクトリ エントリが存在する順序で、FileName フィールドが連結され、ファイル ディレクトリ エントリ セットのファイル名が形成されます。 FileName フィールドの長さ、15 文字、およびファイル名ディレクトリ エントリの最大数 17 を指定すると、最終的な連結ファイル名の最大長は 255 になります。
連結されたファイル名には、他の FAT ベースのファイル システムと同じ無効な文字セットがあります ( 表 35 を参照)。 実装では、FileName フィールドの未使用の文字を値 0000h に設定する必要があります。
表 35 無効な FileName 文字
文字コード | 説明 | 文字コード | 説明 | 文字コード | 説明 |
---|---|---|---|---|---|
0000h | コントロール コード | 0001h | コントロール コード | 0002h | コントロール コード |
0003h | コントロール コード | 0004h | コントロール コード | 0005h | コントロール コード |
0006h | コントロール コード | 0007h | コントロール コード | 0008h | コントロール コード |
0009h | コントロール コード | 000Ah | コントロール コード | 000Bh | コントロール コード |
000Ch | コントロール コード | 000Dh | コントロール コード | 000Eh | コントロール コード |
000Fh | コントロール コード | 0010h | コントロール コード | 0011h | コントロール コード |
0012h | コントロール コード | 0013h | コントロール コード | 0014h | コントロール コード |
0015h | コントロール コード | 0016h | コントロール コード | 0017h | コントロール コード |
0018h | コントロール コード | 0019h | コントロール コード | 001Ah | コントロール コード |
001Bh | コントロール コード | 001Ch | コントロール コード | 001Dh | コントロール コード |
001Eh | コントロール コード | 001Fh | コントロール コード | 0022h | 引用符 |
002Ah | Asterisk | 002Fh | スラッシュ | 003Ah | コロン |
003Ch | より小記号 | 003Eh | より大記号 | 003Fh | 疑問符 |
005Ch | バック スラッシュ | 007Ch | 縦棒 |
ファイル名 "." と ".." には、それぞれ "this directory" と "containing directory" という特別な意味があります。 実装では、これらの予約済みファイル名のいずれかを FileName フィールドに記録することはできません。 ただし、これらの 2 つのファイル名は、一覧表示されているディレクトリと含まれているディレクトリを参照するために、実装によってディレクトリ一覧に生成される場合があります。
実装では、ファイル名とディレクトリ名を ASCII 文字セットのみに制限することが必要な場合があります。 その場合、文字の使用を最初の 128 Unicode エントリの有効な文字の範囲に制限する必要があります。 ボリューム上の Unicode にファイル名とディレクトリ名を格納し、ユーザーとの対話時に ASCII/Unicode との間で変換する必要があります。
7.8 ベンダー拡張ディレクトリエントリ
Vendor Extension ディレクトリ エントリは、ファイル ディレクトリ エントリ セットの無害なセカンダリ ディレクトリ エントリです ( 表 36 を参照)。 ファイル ディレクトリ エントリ セットには、任意の数の Vendor Extension ディレクトリ エントリを含め、セカンダリ ディレクトリ エントリの上限まで、他のセカンダリ ディレクトリ エントリの数を減らします。 さらに、ベンダー拡張機能のディレクトリ エントリは、必要な Stream Extension および File Name ディレクトリ エントリの前に存在しない場合にのみ有効です。
ベンダー拡張ディレクトリ エントリを使用すると、ベンダーは VendorGuid フィールドを介して個々のファイル ディレクトリ エントリ セットに一意のベンダー固有のディレクトリ エントリを設定できます ( 表 36 を参照)。 一意のディレクトリ エントリを使用すると、ベンダーは exFAT ファイル システムを効果的に拡張できます。 ベンダーは VendorDefined フィールドの内容を定義できます ( 表 36 を参照)。 ベンダー実装では、VendorDefined フィールドの内容を保持し、ベンダー固有の機能を提供する場合があります。
ベンダー拡張ディレクトリ エントリの GUID を認識しない実装では、ディレクトリ エントリを他の認識されない無害なセカンダリ ディレクトリ エントリと同じように扱う必要があります ( セクション 8.2 を参照)。
表 36 ベンダー拡張機能ディレクトリEntry
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.8.1 ではその内容が定義されています。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.8.2 ではその内容が定義されています。 |
VendorGuid | 2 | 16 | このフィールドは必須であり、 セクション 7.8.3 ではその内容が定義されています。 |
VendorDefined | 18 | 14 | このフィールドは必須であり、ベンダーはその内容を定義できます。 |
7.8.1 EntryType フィールド
EntryType フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1 を参照)。
7.8.1.1 TypeCode フィールド
TypeCode フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.1 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 0 です。
7.8.1.2 TypeImportance フィールド
TypeImportance フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.2 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.8.1.3 TypeCategory フィールド
TypeCategory フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.3 を参照)。
7.8.1.4 InUse フィールド
InUse フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.8.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、Generic Secondary DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.8.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
仕入先拡張ディレクトリエントリの場合、このフィールドの有効な値は 0 です。
7.8.2.2 NoFatChain フィールド
NoFatChain フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.2.2 を参照)。
7.8.3 VendorGuid フィールド
VendorGuid フィールドには、指定されたベンダー拡張機能を一意に識別する GUID が含まれている必要があります。
null GUID () を除き、このフィールドに指定できる値はすべて有効です {00000000-0000-0000-0000-000000000000}。 ただし、ベンダーは、拡張機能を定義するときに GUID を選択するために、GuidGen.exeなどの GUID 生成ツールを使用する必要があります。
このフィールドの値によって、VendorDefined フィールドのベンダー固有の構造が決まります。
7.9 仕入先割当ディレクトリエントリ
ベンダー割り当てディレクトリ エントリは、ファイル ディレクトリ エントリ セットの無害なセカンダリ ディレクトリ エントリです ( 表 37 を参照)。 ファイル ディレクトリ エントリ セットには、任意の数のベンダー割り当てディレクトリ エントリを含め、セカンダリ ディレクトリ エントリの上限まで、他のセカンダリ ディレクトリ エントリの数を減らします。 さらに、ベンダー割り当てディレクトリ エントリは、必要な Stream Extension および File Name ディレクトリ エントリの前に存在しない場合にのみ有効です。
ベンダー割り当てディレクトリ エントリを使用すると、ベンダーは VendorGuid フィールドを介して個々のファイル ディレクトリ エントリ セットに一意のベンダー固有のディレクトリ エントリを設定できます ( 表 37 を参照)。 一意のディレクトリ エントリを使用すると、ベンダーは exFAT ファイル システムを効果的に拡張できます。 ベンダーは、関連付けられているクラスターの内容 (存在する場合) を定義できます。 ベンダーの実装では、関連付けられているクラスターの内容 (存在する場合) を維持し、ベンダー固有の機能を提供できます。
ベンダー割り当てディレクトリ エントリの GUID を認識しない実装では、ディレクトリ エントリを他の認識されない無害なセカンダリ ディレクトリ エントリと同じように扱う必要があります ( セクション 8.2 を参照)。
表 37 ベンダー割り当てディレクトリエントリ
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
EntryType | 0 | 1 | このフィールドは必須であり、 セクション 7.9.1 ではその内容が定義されています。 |
GeneralSecondaryFlags | 1 | 1 | このフィールドは必須であり、 セクション 7.9.2 ではその内容が定義されています。 |
VendorGuid | 2 | 16 | このフィールドは必須であり、 セクション 7.9.3 ではその内容が定義されています。 |
VendorDefined | 18 | 2 | このフィールドは必須であり、ベンダーはその内容を定義できます。 |
FirstCluster | 20 | 4 | このフィールドは必須であり、 セクション 7.9.4 ではその内容が定義されています。 |
DataLength | 24 | 8 | このフィールドは必須であり、 セクション 7.9.5 ではその内容が定義されています。 |
7.9.1 EntryType フィールド
EntryType フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1 を参照)。
7.9.1.1 TypeCode フィールド
TypeCode フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.1 を参照)。
仕入先割り当てディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.1.2 TypeImportance フィールド
TypeImportance フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.2 を参照)。
仕入先割り当てディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.1.3 TypeCategory フィールド
TypeCategory フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.3 を参照)。
7.9.1.4 InUse フィールド
InUse フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.1.4 を参照)。
7.9.2 GeneralSecondaryFlags フィールド
GeneralSecondaryFlags フィールドは、Generic Secondary DirectoryEntry テンプレート ( セクション 6.4.2 を参照) で提供される定義に準拠し、予約する CustomDefined フィールドの内容を定義します。
7.9.2.1 AllocationPossible フィールド
AllocationPossible フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.2.1 を参照)。
仕入先割り当てディレクトリエントリの場合、このフィールドの有効な値は 1 です。
7.9.2.2 NoFatChain フィールド
NoFatChain フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.2.2 を参照)。
7.9.3 VendorGuid フィールド
VendorGuid フィールドには、指定されたベンダー割り当てを一意に識別する GUID が含まれている必要があります。
null GUID () を除き、このフィールドに指定できる値はすべて有効です {00000000-0000-0000-0000-000000000000}。 ただし、ベンダーは、拡張機能を定義するときに GUID を選択するために、GuidGen.exeなどの GUID 生成ツールを使用する必要があります。
このフィールドの値は、関連付けられたクラスターの内容のベンダー固有の構造 (存在する場合) を決定します。
7.9.4 FirstCluster フィールド
FirstCluster フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.3 を参照)。
7.9.5 DataLength フィールド
DataLength フィールドは、Generic Secondary DirectoryEntry テンプレートで提供される定義に準拠している必要があります ( セクション 6.4.4 を参照)。
7.10 TexFAT パディング ディレクトリ エントリ
この仕様 exFAT Revision 1.00 File System Basic Specification では、TexFAT Padding ディレクトリ エントリは定義されていません。 ただし、その型コードは 1 で、型の重要度は 1 です。 この仕様の実装では、TexFAT Padding ディレクトリ エントリは、認識されない他の無害なプライマリ ディレクトリ エントリと同じように扱う必要があります。実装では、TexFAT Padding ディレクトリ エントリは移動されません。
8 実装に関する注意事項
8.1 推奨書き込み順序付け
実装では、電源障害やその他の避けられない障害に対するボリュームの回復性を可能な限り確保する必要があります。 新しいディレクトリ エントリを作成したり、クラスターの割り当てを変更したりする場合、実装は通常、次の記述順序に従う必要があります。
VolumeDirty フィールドの値を 1 に設定します
必要に応じてアクティブな FAT を更新する
アクティブな割り当てビットマップを更新する
必要に応じて、ディレクトリ エントリを作成または更新します
最初のステップの前の値が 0 の場合は、VolumeDirty フィールドの値を 0 にクリアします
ディレクトリ エントリを削除するとき、またはクラスター割り当てを解放する場合、実装は次の書き込み順序に従う必要があります。
VolumeDirty フィールドの値を 1 に設定します
必要に応じて、ディレクトリ エントリを削除または更新します
必要に応じてアクティブな FAT を更新する
アクティブな割り当てビットマップを更新する
最初のステップの前の値が 0 の場合は、VolumeDirty フィールドの値を 0 にクリアします
8.2 認識できないディレクトリ エントリの影響
同じメジャー リビジョン番号 1 とマイナー リビジョン番号が 0 より大きい将来の exFAT 仕様では、新しい無害なプライマリ、重要なセカンダリ、および無害なセカンダリ ディレクトリ エントリが定義される可能性があります。 新しい重要なプライマリ ディレクトリ エントリを定義できるのは、より大きなメジャー リビジョン番号の exFAT 仕様のみです。 この仕様の実装である exFAT リビジョン 1.00 ファイル システム基本仕様は、メジャー リビジョン番号 1 の exFAT ボリュームとマイナー リビジョン番号をマウントしてアクセスできる必要があります。 これは、実装で認識されないディレクトリ エントリが発生する可能性があるシナリオを示します。 次に、これらのシナリオの影響について説明します。
ルート ディレクトリに認識されない重要なプライマリ ディレクトリ エントリが存在すると、ボリュームが無効になります。 ルート以外のディレクトリにファイル ディレクトリ エントリを除く重要なプライマリ ディレクトリ エントリが存在すると、ホスティング ディレクトリが無効になります。
実装では、認識できない無害なプライマリ ディレクトリ エントリとそれに関連付けられているクラスター割り当てを変更することはできません。 ただし、ディレクトリを削除する場合、およびディレクトリを削除する場合にのみ、実装は認識されない無害なプライマリ ディレクトリ エントリを削除し、関連付けられているすべてのクラスター割り当てを解放する必要があります (存在する場合)。
実装では、認識できない重要なセカンダリ ディレクトリ エントリとそれに関連付けられているクラスター割り当てを変更することはできません。 ディレクトリ エントリ セットに認識されない重要なセカンダリ ディレクトリ エントリが 1 つ以上存在すると、ディレクトリ エントリ セット全体が認識されません。 認識できない重要なセカンダリ ディレクトリ エントリを 1 つ以上含むディレクトリ エントリ セットを削除する場合、認識されない重要なセカンダリ ディレクトリ エントリに関連付けられているクラスター割り当て (存在する場合) はすべて、実装によって解放されます。 さらに、ディレクトリ エントリ セットでディレクトリが記述されている場合、実装では次の場合があります。
ディレクトリに移動する
含まれているディレクトリ エントリを列挙する
包含ディレクトリ エントリを削除する
包含ディレクトリ エントリを別のディレクトリに移動する
ただし、実装では次の処理は行われません。
記載されているように、削除を除く包含ディレクトリ エントリを変更する
新しい包含ディレクトリ エントリを作成する
記載されているように、走査と列挙を除く包含ディレクトリ エントリを開く
実装では、認識できない無害なセカンダリ ディレクトリ エントリとそれに関連付けられているクラスター割り当てを変更することはできません。 実装では、認識されない無害なセカンダリ ディレクトリ エントリを無視する必要があります。 ディレクトリ エントリ セットを削除する場合、認識されない無害なセカンダリ ディレクトリ エントリに関連付けられているクラスター割り当てがあれば、実装によってすべてのクラスター割り当てが解放されます。
9 ファイル システムの制限
9.1 セクターサイズの制限
BytesPerSectorShift フィールドは、下限と上限のセクター サイズの制限を定義します ( 下限は 512 バイト、上限は 4,096 バイトと評価されます)。
9.2 クラスター サイズの制限
SectorPerClusterShift フィールドは、クラスター サイズの下限と上限を定義します (下限: 1 セクター、上限: 25 -- BytesPerSectorShift セクター。これは 32 MB と評価されます)。
9.3 クラスター ヒープ サイズの制限
クラスター ヒープには、ルート ディレクトリ、すべての割り当てビットマップ、および Up-case テーブルという基本的なファイル システム構造をホストするための少なくとも十分な領域が含まれている必要があります。
クラスター ヒープ サイズの下限は、クラスター ヒープに存在する各基本的なファイル システム構造のサイズ制限の下限の関数です。 可能な限り最小のクラスター (512 バイト) を指定した場合でも、各基本的なファイル システム構造には 1 つ以上のクラスターが必要ありません。 したがって、 下限は 2 + NumberOfFats クラスターであり、NumberOfFats フィールドの値に応じて 3 つまたは 4 つのクラスターに評価されます。
クラスター ヒープ サイズの上限は、ClusterCount フィールドが定義するクラスターの最大数の単純な関数です (上限: 232 - 11 クラスター)。 クラスター のサイズに関係なく、このようなクラスター ヒープには、少なくとも基本的なファイル システム構造をホストするのに十分な領域があります。
9.4 ボリューム サイズの制限
VolumeLength フィールドは、ボリューム サイズの下限と上限を定義します (下限: 2 20/2BytesPerSectorShiftセクター。これは 1 MB と評価されます)。上限: 264- 1 セクター。最大のセクター サイズを指定すると、約 64ZB と評価されます)。 ただし、この仕様では、クラスター ヒープ内の 2 つ以上の24 個から 2 個のクラスターを推奨します ( セクション 3.1.9 を参照)。 そのため、ボリュームの推奨上限は ClusterHeapOffset + (224- 2) * 2SectorsPerClusterShift です。 可能な最大のクラスター サイズである 32 MB を指定し、ClusterHeapOffset が 96 MB (メインおよびバックアップ ブート リージョンと最初の FAT にのみ十分な領域) であると仮定すると、ボリュームの推奨上限は約 512 TB と評価されます。
9.5 ディレクトリ サイズの制限
Stream Extension ディレクトリ エントリの DataLength フィールドは、ディレクトリ サイズの下限と上限 (下限: 0 バイト、上限: 256 MB) を定義します。 つまり、ディレクトリは最大 8,388,608 個のディレクトリ エントリをホストできます (各ディレクトリ エントリは 32 バイトを消費します)。 可能な限り小さいファイル ディレクトリ エントリ セット、3 つのディレクトリ エントリを考えると、ディレクトリは最大 2,796,202 個のファイルをホストできます。
10 付録
10.1 グローバル一意識別子 (GUID)
GUID は、ユニバーサル一意識別子の Microsoft 実装です。 GUID は、8 桁の 1 つの 16 進数のグループで構成される 128 ビットの値で、その後にそれぞれ 4 桁の 16 進数の 3 つのグループが続き、12 桁の 16 進数のグループが続きます (例: {6B29FC40-CA47-1067-B31D-00DD010662DA})。 (表 38 を参照)。
表 38 GUID の構造
フィールド名 | Offset (バイト) |
[サイズ] (バイト) |
コメント |
---|---|---|---|
Data1 | 0 | 4 | このフィールドは必須であり、GUID の最初のグループからの 4 バイト (例の 6B29FC40h) が含まれています。 |
Data2 | 4 | 2 | このフィールドは必須であり、GUID の 2 番目のグループ (例の CA47h) の 2 バイトが含まれています。 |
Data3 | 6 | 2 | このフィールドは必須であり、GUID の 3 番目のグループの 2 バイト (この例では 1067h) が含まれています。 |
Data4[0] | 8 | 1 | このフィールドは必須であり、GUID の 4 番目のグループの最上位バイト (例の B3h) が含まれています。 |
Data4[1] | 9 | 1 | このフィールドは必須であり、GUID の 4 番目のグループ (例の 1Dh) の最下位バイトが含まれています。 |
Data4[2] | 10 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの最初のバイト (例では 00h) が含まれています。 |
Data4[3] | 11 | 1 | このフィールドは必須であり、GUID の 5 番目のグループ (例の DDh) の 2 番目のバイトが含まれています。 |
Data4[4] | 12 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 3 番目のバイト (この例では 01h) が含まれています。 |
Data4[5] | 13 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 4 番目のバイト (例では 06h) が含まれています。 |
Data4[6] | 14 | 1 | このフィールドは必須であり、GUID の 5 番目のグループの 5 番目のバイト (例では 62h) が含まれています。 |
Data4[7] | 15 | 1 | このフィールドは必須であり、GUID の 5 番目のグループ (例の DAh) の 6 番目のバイトが含まれています。 |
10.2 パーティション テーブル
広範な使用シナリオで exFAT ボリュームの相互運用性を確保するために、実装では、GPT パーティションストレージに対してパーティションタイプ 07h を使用し、パーティション GUID {EBD0A0A2-B9E5-4433-87C0-68B6B72699C7} を使用する必要があります。
11 ドキュメント変更履歴
表 39 では、このドキュメントのリリース、修正、追加、削除、および説明の履歴について説明します。
表 39 ドキュメントの変更履歴
日付 | 変更の説明 |
---|---|
2008 年 1 月 8 日 | 基本仕様の最初のリリース。次のものが含まれます。 セクション 1、概要 セクション 2, セクション 3, メインおよびバックアップブートリージョン セクション 4, ファイル割り当てテーブル領域 セクション 5, データ領域 セクション 6, ディレクトリ構造 セクション 7, ディレクトリ エントリの定義 セクション 8, 実装に関する注意事項 セクション 9, ファイル システムの制限 セクション 10, 付録 |
2008 年 6 月 8 日 | 基本仕様の 2 番目のリリース。これには次の変更が含まれます。 第11条の追加 セクション 7.8 および 7.9 のベンダー拡張機能とベンダー割り当てディレクトリ エントリの追加 セクション 7.2.5 および 7.2.5.1 での推奨されるアップケース テーブルの追加 セクション 7.4 での UtcOffset フィールドの追加と、セクション 1.3 での UTC 頭字語の追加 表 19 の CustomDefined フィールドのサイズの修正 セクション 7.6.3 の NameLength 値の有効範囲の修正 セクション 7.4 の Timestamp フィールドと 10msIncrement フィールドの修正と明確化 セクション 3.3 の Null パラメーター構造の説明 セクション6.3.4.2のNoFatChainフィールドの値の意味の説明 セクション 6.2.3 の DataLength フィールドの値の意味の説明 セクション 3.1.13.2 の VolumeDirty フィールドの説明と、セクション 8.1 の推奨書き込み順序 セクション 3.1.13.3 の MediaFailure フィールドの説明 |
2008 年 10 月 1 日 | 基本仕様の 3 番目のリリース。これには次の変更が含まれます。 フィールド説明への SHALL、SHOULD、MAY の追加 表 2 セクション 1.3 での UTC 定義の追加 TexFAT 仕様ドキュメントとの整合性を確保するために、セクション 1.5 を変更しました。 セクション 6.2 でディレクトリ エントリのレイアウトを定義できるのは Microsoft のみであるという制限を明確にしました DataLength が 0 で、NoFatChain がセクション 6.3.5 およびセクション 6.4.3 に設定されている場合、FirstCluster Field は 0 になる必要があることを説明しました セクション 7.4 で有効なファイル ディレクトリ エントリの要件を明確にしました セクション 7.7 に一意のファイル名とディレクトリ名の要件を追加しました セクション 7.7.3 の最後に ASCII の実装に関するメモを追加しました |
2009 年 1 月 1 日 | 基本仕様の 4 番目のリリース。次の変更が含まれます。 Windows CE Access Control エントリへの参照を削除しました 完全なアップケーステーブルを明示的に要求するために、セクション7.2.5.1に明確化を追加しました |
2009 年 9 月 2 日 | 基本仕様の 5 番目のリリース。次の変更が含まれます。 PDF 変換の改善を可能にするドキュメントの書式設定の変更 |
2010 年 2 月 24 日 | 基本仕様の 6 番目のリリース。次の変更が含まれます。 修正された不適切なステートメント: セクション 6.3.5 とセクション 6.4.3 の "DataLength が 0 で NoFatChain が設定されている場合は、FirstCluster Field は 0 になります"。"NoFatChain ビットが 1 の場合、FirstCluster はクラスター ヒープ内の有効なクラスターを指す必要があります" に設定されている場合、有効な割り当てが必要であることを明確にします。 "NoFatChain ビットが 1 の場合、DataLength を 0 にすることはできません。 FirstCluster フィールドが 0 の場合、NoFatChain ビットが設定されている場合に有効な割り当てが必要であることを明確にするために、DataLength もセクション 6.3.6 とセクション 6.4.4 にゼロにする必要があります。 2010 年に著作権に関する通知を更新しました |
2019 年 8 月 26 日 | 基本仕様の 7 番目のリリース。次の変更が含まれます。 仕様に関連する次の法律条項が更新されました。 Microsoft 社外秘通知の削除 Microsoft Corporation Technical Documentation License Agreement セクションの削除 2019 年に著作権に関する通知を更新しました |
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示